{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ProcessFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Recovery",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "affectedAssets",
      "outputs": [
        {
          "internalType": "address payable[14]",
          "name": "",
          "type": "address[14]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        }
      ],
      "name": "assetInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalAffected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalMinted",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalCollected",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalRecovered",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeRouter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_handler",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "collect",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fundsRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        }
      ],
      "name": "isAffectedAsset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "record",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "records",
      "outputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "originalUser",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "recovered",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        }
      ],
      "name": "recoverable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "remove",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalAffected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalCollected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalMinted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalRecovered",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "affectedAssets()": "7013ca26",
    "approve(address,uint256)": "095ea7b3",
    "assetInfo(address)": "8b0dcb4e",
    "balanceOf(address)": "70a08231",
    "baseURI()": "6c0360eb",
    "bridgeRouter()": "41af5b52",
    "collect(address,address,uint256)": "c8fea2fb",
    "fundsRecipient()": "3b6fd2cf",
    "getApproved(uint256)": "081812fc",
    "initialize()": "8129fc1c",
    "isAffectedAsset(address)": "6c267633",
    "isApprovedForAll(address,address)": "e985e9c5",
    "name()": "06fdde03",
    "nextID()": "1e96917d",
    "owner()": "8da5cb5b",
    "ownerOf(uint256)": "6352211e",
    "record(address,address,uint256)": "172a93fb",
    "records(uint256)": "34461067",
    "recoverable(uint256)": "00c12c31",
    "remove(address,uint256)": "abe7f1ab",
    "renounceOwnership()": "715018a6",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenByIndex(uint256)": "4f6ccce7",
    "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
    "tokenURI(uint256)": "c87b56dd",
    "totalAffected(address)": "e271f8e3",
    "totalCollected(address)": "f3f05313",
    "totalMinted(address)": "003d4790",
    "totalRecovered(address)": "bf799f2b",
    "totalSupply()": "18160ddd",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/accountants/NFTAccountant.sol",
    "id": 33523,
    "exportedSymbols": {
      "AllowListNFTRecoveryAccountant": [
        33522
      ],
      "ERC721Upgradeable": [
        24650
      ],
      "EventAccountant": [
        32803
      ],
      "IERC20": [
        27517
      ],
      "NFTAccountant": [
        33021
      ],
      "NFTRecoveryAccountant": [
        33330
      ],
      "OwnableUpgradeable": [
        23168
      ],
      "SafeERC20": [
        27730
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:11726:40",
    "nodes": [
      {
        "id": 32805,
        "nodeType": "PragmaDirective",
        "src": "46:22:40",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 32807,
        "nodeType": "ImportDirective",
        "src": "116:54:40",
        "absolutePath": "packages/contracts-bridge/contracts/accountants/EventAccountant.sol",
        "file": "./EventAccountant.sol",
        "scope": 33523,
        "sourceUnit": 32804,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32806,
              "name": "EventAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:15:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32809,
        "nodeType": "ImportDirective",
        "src": "217:70:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 33523,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32808,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "225:6:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32811,
        "nodeType": "ImportDirective",
        "src": "288:76:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "scope": 33523,
        "sourceUnit": 27731,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32810,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "296:9:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32813,
        "nodeType": "ImportDirective",
        "src": "365:105:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "scope": 33523,
        "sourceUnit": 24651,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32812,
              "name": "ERC721Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "373:17:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32815,
        "nodeType": "ImportDirective",
        "src": "471:101:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 33523,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32814,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "479:18:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33021,
        "nodeType": "ContractDefinition",
        "src": "574:3460:40",
        "nodes": [
          {
            "id": 32830,
            "nodeType": "StructDefinition",
            "src": "738:123:40",
            "canonicalName": "NFTAccountant.Record",
            "members": [
              {
                "constant": false,
                "id": 32823,
                "mutability": "mutable",
                "name": "asset",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "762:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32822,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "762:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32825,
                "mutability": "mutable",
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "785:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32824,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "785:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32827,
                "mutability": "mutable",
                "name": "originalUser",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "808:20:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32826,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "808:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32829,
                "mutability": "mutable",
                "name": "recovered",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "838:16:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32828,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "838:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "scope": 33021,
            "visibility": "public"
          },
          {
            "id": 32833,
            "nodeType": "VariableDeclaration",
            "src": "895:21:40",
            "constant": false,
            "documentation": {
              "id": 32831,
              "nodeType": "StructuredDocumentation",
              "src": "867:23:40",
              "text": "@notice next NFT ID"
            },
            "functionSelector": "1e96917d",
            "mutability": "mutable",
            "name": "nextID",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 32832,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "895:7:40",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 32838,
            "nodeType": "VariableDeclaration",
            "src": "965:41:40",
            "constant": false,
            "documentation": {
              "id": 32834,
              "nodeType": "StructuredDocumentation",
              "src": "922:38:40",
              "text": "@notice maps NFT ID to NFT details"
            },
            "functionSelector": "34461067",
            "mutability": "mutable",
            "name": "records",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
              "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
            },
            "typeName": {
              "id": 32837,
              "keyType": {
                "id": 32835,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "973:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "965:26:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
              },
              "valueType": {
                "id": 32836,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 32830,
                "src": "984:6:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                  "typeString": "struct NFTAccountant.Record"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32843,
            "nodeType": "VariableDeclaration",
            "src": "1059:46:40",
            "constant": false,
            "documentation": {
              "id": 32839,
              "nodeType": "StructuredDocumentation",
              "src": "1012:42:40",
              "text": "@notice token address => amount minted"
            },
            "functionSelector": "003d4790",
            "mutability": "mutable",
            "name": "totalMinted",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32842,
              "keyType": {
                "id": 32840,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1067:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1059:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 32841,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1078:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32847,
            "nodeType": "VariableDeclaration",
            "src": "1188:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 32844,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1188:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 32846,
              "length": {
                "hexValue": "3437",
                "id": 32845,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1196:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "1188:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 32858,
            "nodeType": "EventDefinition",
            "src": "1668:145:40",
            "anonymous": false,
            "documentation": {
              "id": 32848,
              "nodeType": "StructuredDocumentation",
              "src": "1220:443:40",
              "text": " @notice emitted when tokens would have been transferred, but the asset\n         was in the affected assets list\n @param id The token ID of the NFT minted\n @param asset The address of the affected token contract\n @param recipient The intended recipient of the tokens; the recipient in the\n                  transfer message\n @param amount The amount of tokens that would have been received"
            },
            "name": "ProcessFailure",
            "parameters": {
              "id": 32857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32850,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1698:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32849,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32852,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1726:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1726:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32854,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1757:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1757:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32856,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1792:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32855,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1792:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1688:124:40"
            }
          },
          {
            "id": 32868,
            "nodeType": "FunctionDefinition",
            "src": "1865:68:40",
            "body": {
              "id": 32867,
              "nodeType": "Block",
              "src": "1931:2:40",
              "statements": []
            },
            "documentation": {
              "id": 32859,
              "nodeType": "StructuredDocumentation",
              "src": "1819:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 32864,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32861,
                    "src": "1916:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 32865,
                "modifierName": {
                  "id": 32863,
                  "name": "EventAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 32803,
                  "src": "1900:15:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_EventAccountant_$32803_$",
                    "typeString": "type(contract EventAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1900:30:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 32862,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32861,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 32868,
                  "src": "1877:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1876:23:40"
            },
            "returnParameters": {
              "id": 32866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1931:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32889,
            "nodeType": "FunctionDefinition",
            "src": "1939:200:40",
            "body": {
              "id": 32888,
              "nodeType": "Block",
              "src": "1980:159:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32873,
                      "name": "__EventAccountant_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32724,
                      "src": "1990:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1990:24:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32875,
                  "nodeType": "ExpressionStatement",
                  "src": "1990:24:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4e6f6d6164204e4654",
                        "id": 32877,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2038:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        "value": "Nomad NFT"
                      },
                      {
                        "hexValue": "6e6f4e4654",
                        "id": 32878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2051:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        },
                        "value": "noNFT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        }
                      ],
                      "id": 32876,
                      "name": "__ERC721_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23778,
                      "src": "2024:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 32879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:35:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32880,
                  "nodeType": "ExpressionStatement",
                  "src": "2024:35:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "68747470733a2f2f6e66742e6e6f6d61642e78797a2f",
                        "id": 32882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2081:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        },
                        "value": "https://nft.nomad.xyz/"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        }
                      ],
                      "id": 32881,
                      "name": "_setBaseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24552,
                      "src": "2069:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 32883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2069:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32884,
                  "nodeType": "ExpressionStatement",
                  "src": "2069:37:40"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32885,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "2116:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2116:16:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32887,
                  "nodeType": "ExpressionStatement",
                  "src": "2116:16:40"
                }
              ]
            },
            "functionSelector": "8129fc1c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 32871,
                "modifierName": {
                  "id": 32870,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "1968:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1968:11:40"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 32869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1958:2:40"
            },
            "returnParameters": {
              "id": 32872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1980:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32964,
            "nodeType": "FunctionDefinition",
            "src": "2338:792:40",
            "body": {
              "id": 32963,
              "nodeType": "Block",
              "src": "2451:679:40",
              "statements": [
                {
                  "assignments": [
                    32901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32901,
                      "mutability": "mutable",
                      "name": "_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 32963,
                      "src": "2485:11:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32900,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2485:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32903,
                  "initialValue": {
                    "id": 32902,
                    "name": "nextID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32833,
                    "src": "2499:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2485:20:40"
                },
                {
                  "expression": {
                    "id": 32908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32904,
                      "name": "nextID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32833,
                      "src": "2515:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 32907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 32905,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2524:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 32906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2530:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "2524:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2515:16:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32909,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:16:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32911,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "2551:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32912,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2558:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32910,
                      "name": "_safeMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24290,
                        24319
                      ],
                      "referencedDeclaration": 24290,
                      "src": "2541:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 32913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2541:21:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32914,
                  "nodeType": "ExpressionStatement",
                  "src": "2541:21:40"
                },
                {
                  "expression": {
                    "id": 32920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32915,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2572:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32917,
                        "indexExpression": {
                          "id": 32916,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2580:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2572:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32918,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "2572:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32919,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32892,
                      "src": "2593:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2572:27:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32921,
                  "nodeType": "ExpressionStatement",
                  "src": "2572:27:40"
                },
                {
                  "expression": {
                    "id": 32930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32922,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2609:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32924,
                        "indexExpression": {
                          "id": 32923,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2617:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2609:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32825,
                      "src": "2609:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32928,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32896,
                          "src": "2638:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 32927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2631:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 32926,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "2631:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2631:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "2609:37:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 32931,
                  "nodeType": "ExpressionStatement",
                  "src": "2609:37:40"
                },
                {
                  "expression": {
                    "id": 32937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32932,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2656:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32934,
                        "indexExpression": {
                          "id": 32933,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2664:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2656:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32935,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "2656:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32936,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32894,
                      "src": "2684:5:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2656:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32938,
                  "nodeType": "ExpressionStatement",
                  "src": "2656:33:40"
                },
                {
                  "expression": {
                    "id": 32943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 32939,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "2791:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 32941,
                      "indexExpression": {
                        "id": 32940,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "2803:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2791:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 32942,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32896,
                      "src": "2814:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2791:30:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32944,
                  "nodeType": "ExpressionStatement",
                  "src": "2791:30:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 32952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 32946,
                            "name": "totalMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32843,
                            "src": "2986:11:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32948,
                          "indexExpression": {
                            "id": 32947,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "2998:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2986:19:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 32949,
                            "name": "totalAffected",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32620,
                            "src": "3009:13:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32951,
                          "indexExpression": {
                            "id": 32950,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "3023:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3009:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2986:44:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f7665726d696e74",
                        "id": 32953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3032:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        },
                        "value": "overmint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        }
                      ],
                      "id": 32945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2978:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2978:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32955,
                  "nodeType": "ExpressionStatement",
                  "src": "2978:65:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 32957,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "3095:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 32958,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "3100:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32959,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "3108:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32960,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32896,
                        "src": "3115:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32956,
                      "name": "ProcessFailure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32858,
                      "src": "3080:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 32961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32962,
                  "nodeType": "EmitStatement",
                  "src": "3075:48:40"
                }
              ]
            },
            "baseFunctions": [
              32802
            ],
            "documentation": {
              "id": 32890,
              "nodeType": "StructuredDocumentation",
              "src": "2145:188:40",
              "text": " @notice Records information to state and logs a ProcessFailure event\n @param _asset  The asset\n @param _user   The recipient\n @param _amount The amount"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_record",
            "overrides": {
              "id": 32898,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2442:8:40"
            },
            "parameters": {
              "id": 32897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32892,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2364:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2364:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32894,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2388:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32893,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2388:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32896,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2411:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32895,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2411:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2354:78:40"
            },
            "returnParameters": {
              "id": 32899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2451:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32979,
            "nodeType": "FunctionDefinition",
            "src": "3197:162:40",
            "body": {
              "id": 32978,
              "nodeType": "Block",
              "src": "3328:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32975,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3338:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3338:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32977,
                  "nodeType": "ExpressionStatement",
                  "src": "3338:14:40"
                }
              ]
            },
            "baseFunctions": [
              24141
            ],
            "documentation": {
              "id": 32965,
              "nodeType": "StructuredDocumentation",
              "src": "3136:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "23b872dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "overrides": {
              "id": 32973,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3319:8:40"
            },
            "parameters": {
              "id": 32972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32967,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3228:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3228:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32969,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3254:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3254:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32971,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3278:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3278:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3218:85:40"
            },
            "returnParameters": {
              "id": 32974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3328:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 32994,
            "nodeType": "FunctionDefinition",
            "src": "3426:166:40",
            "body": {
              "id": 32993,
              "nodeType": "Block",
              "src": "3561:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32990,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3571:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3571:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32992,
                  "nodeType": "ExpressionStatement",
                  "src": "3571:14:40"
                }
              ]
            },
            "baseFunctions": [
              24160
            ],
            "documentation": {
              "id": 32980,
              "nodeType": "StructuredDocumentation",
              "src": "3365:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "42842e0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 32988,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3552:8:40"
            },
            "parameters": {
              "id": 32987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32982,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3461:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3461:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32984,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3487:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32983,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3487:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32986,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3511:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3511:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3451:85:40"
            },
            "returnParameters": {
              "id": 32989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3561:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33011,
            "nodeType": "FunctionDefinition",
            "src": "3659:197:40",
            "body": {
              "id": 33010,
              "nodeType": "Block",
              "src": "3825:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 33007,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3835:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 33008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3835:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33009,
                  "nodeType": "ExpressionStatement",
                  "src": "3835:14:40"
                }
              ]
            },
            "baseFunctions": [
              24190
            ],
            "documentation": {
              "id": 32995,
              "nodeType": "StructuredDocumentation",
              "src": "3598:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "b88d4fde",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 33005,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3816:8:40"
            },
            "parameters": {
              "id": 33004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32997,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3694:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32996,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3694:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32999,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3720:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33001,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3744:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33003,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3773:12:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 33002,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3773:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3684:116:40"
            },
            "returnParameters": {
              "id": 33006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3825:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33020,
            "nodeType": "FunctionDefinition",
            "src": "3955:77:40",
            "body": {
              "id": 33019,
              "nodeType": "Block",
              "src": "3993:39:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 33016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4010:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "id": 33015,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "4003:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 33017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4003:22:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33018,
                  "nodeType": "ExpressionStatement",
                  "src": "4003:22:40"
                }
              ]
            },
            "documentation": {
              "id": 33012,
              "nodeType": "StructuredDocumentation",
              "src": "3862:88:40",
              "text": " @notice Revert with the same error message on any attempted transfers"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_noTransfers",
            "parameters": {
              "id": 33013,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3976:2:40"
            },
            "returnParameters": {
              "id": 33014,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3993:0:40"
            },
            "scope": 33021,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 32816,
              "name": "EventAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 32803,
              "src": "604:15:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EventAccountant_$32803",
                "typeString": "contract EventAccountant"
              }
            },
            "id": 32817,
            "nodeType": "InheritanceSpecifier",
            "src": "604:15:40"
          },
          {
            "baseName": {
              "id": 32818,
              "name": "ERC721Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24650,
              "src": "625:17:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Upgradeable_$24650",
                "typeString": "contract ERC721Upgradeable"
              }
            },
            "id": 32819,
            "nodeType": "InheritanceSpecifier",
            "src": "625:17:40"
          },
          {
            "baseName": {
              "id": 32820,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "648:18:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 32821,
            "nodeType": "InheritanceSpecifier",
            "src": "648:18:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33635
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTAccountant",
        "scope": 33523
      },
      {
        "id": 33330,
        "nodeType": "ContractDefinition",
        "src": "4069:4904:40",
        "nodes": [
          {
            "id": 33027,
            "nodeType": "UsingForDirective",
            "src": "4132:27:40",
            "libraryName": {
              "id": 33025,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27730,
              "src": "4138:9:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$27730",
                "typeString": "library SafeERC20"
              }
            },
            "typeName": {
              "id": 33026,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27517,
              "src": "4152:6:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$27517",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 33030,
            "nodeType": "VariableDeclaration",
            "src": "4275:39:40",
            "constant": false,
            "documentation": {
              "id": 33028,
              "nodeType": "StructuredDocumentation",
              "src": "4165:105:40",
              "text": "@notice the address that receives funds\n that should not have been transferred to the contract"
            },
            "functionSelector": "3b6fd2cf",
            "mutability": "immutable",
            "name": "fundsRecipient",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 33029,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "4275:7:40",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 33035,
            "nodeType": "VariableDeclaration",
            "src": "4377:49:40",
            "constant": false,
            "documentation": {
              "id": 33031,
              "nodeType": "StructuredDocumentation",
              "src": "4321:51:40",
              "text": "@notice token address => total amount collected"
            },
            "functionSelector": "f3f05313",
            "mutability": "mutable",
            "name": "totalCollected",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33034,
              "keyType": {
                "id": 33032,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4385:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4377:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33033,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4396:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33040,
            "nodeType": "VariableDeclaration",
            "src": "4497:49:40",
            "constant": false,
            "documentation": {
              "id": 33036,
              "nodeType": "StructuredDocumentation",
              "src": "4432:60:40",
              "text": "@notice token address => total amount recovered to users"
            },
            "functionSelector": "bf799f2b",
            "mutability": "mutable",
            "name": "totalRecovered",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33039,
              "keyType": {
                "id": 33037,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4505:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4497:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33038,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4516:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33044,
            "nodeType": "VariableDeclaration",
            "src": "4629:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 33041,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4629:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33043,
              "length": {
                "hexValue": "3438",
                "id": 33042,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4637:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "4629:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33055,
            "nodeType": "EventDefinition",
            "src": "4913:139:40",
            "anonymous": false,
            "documentation": {
              "id": 33045,
              "nodeType": "StructuredDocumentation",
              "src": "4661:247:40",
              "text": " @notice A recovery event.\n @param id The tokenId recovering funds\n @param asset The asset being transferred\n @param recipient The user receiving the asset\n @param amount The amount transferred to the user"
            },
            "name": "Recovery",
            "parameters": {
              "id": 33054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33047,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4937:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4965:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33051,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4996:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33050,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4996:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33053,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "5031:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4927:124:40"
            }
          },
          {
            "id": 33071,
            "nodeType": "FunctionDefinition",
            "src": "5104:150:40",
            "body": {
              "id": 33070,
              "nodeType": "Block",
              "src": "5205:49:40",
              "statements": [
                {
                  "expression": {
                    "id": 33068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33066,
                      "name": "fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33030,
                      "src": "5215:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 33067,
                      "name": "_fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33060,
                      "src": "5232:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5215:32:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33069,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:32:40"
                }
              ]
            },
            "documentation": {
              "id": 33056,
              "nodeType": "StructuredDocumentation",
              "src": "5058:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33063,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33058,
                    "src": "5186:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33064,
                "modifierName": {
                  "id": 33062,
                  "name": "NFTAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33021,
                  "src": "5172:13:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTAccountant_$33021_$",
                    "typeString": "type(contract NFTAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5172:28:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33058,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5116:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5116:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33060,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5139:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5139:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5115:48:40"
            },
            "returnParameters": {
              "id": 33065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5205:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33110,
            "nodeType": "FunctionDefinition",
            "src": "5735:439:40",
            "body": {
              "id": 33109,
              "nodeType": "Block",
              "src": "5975:199:40",
              "statements": [
                {
                  "expression": {
                    "id": 33089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33085,
                      "name": "_totalAffected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33077,
                      "src": "5985:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33086,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "6002:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33088,
                      "indexExpression": {
                        "id": 33087,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6016:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6002:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5985:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33090,
                  "nodeType": "ExpressionStatement",
                  "src": "5985:38:40"
                },
                {
                  "expression": {
                    "id": 33095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33091,
                      "name": "_totalMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33079,
                      "src": "6033:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33092,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "6048:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33094,
                      "indexExpression": {
                        "id": 33093,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6060:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6048:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6033:34:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33096,
                  "nodeType": "ExpressionStatement",
                  "src": "6033:34:40"
                },
                {
                  "expression": {
                    "id": 33101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33097,
                      "name": "_totalCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33081,
                      "src": "6077:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33098,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "6095:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33100,
                      "indexExpression": {
                        "id": 33099,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6110:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6095:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6077:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33102,
                  "nodeType": "ExpressionStatement",
                  "src": "6077:40:40"
                },
                {
                  "expression": {
                    "id": 33107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33103,
                      "name": "_totalRecovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33083,
                      "src": "6127:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33104,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "6145:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33106,
                      "indexExpression": {
                        "id": 33105,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6160:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6145:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6127:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33108,
                  "nodeType": "ExpressionStatement",
                  "src": "6127:40:40"
                }
              ]
            },
            "documentation": {
              "id": 33072,
              "nodeType": "StructuredDocumentation",
              "src": "5260:470:40",
              "text": " @notice Return all pertinent state information for an asset in a single RPC call for convenience\n @return _totalAffected total amount of tokens affected\n @return _totalMinted total amount minted in NFTs from unbridging this\n         asset\n @return _totalCollected lifetime total amount of this asset that has\n         passed through the account\n @return _totalRecovered total amount of this asset recovered by users"
            },
            "functionSelector": "8b0dcb4e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assetInfo",
            "parameters": {
              "id": 33075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33074,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5754:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5754:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5753:16:40"
            },
            "returnParameters": {
              "id": 33084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33077,
                  "mutability": "mutable",
                  "name": "_totalAffected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5830:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5830:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33079,
                  "mutability": "mutable",
                  "name": "_totalMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5866:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5866:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33081,
                  "mutability": "mutable",
                  "name": "_totalCollected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5900:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5900:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33083,
                  "mutability": "mutable",
                  "name": "_totalRecovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5937:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5816:154:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33150,
            "nodeType": "FunctionDefinition",
            "src": "6279:314:40",
            "body": {
              "id": 33149,
              "nodeType": "Block",
              "src": "6347:246:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33124,
                        "name": "fundsRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33030,
                        "src": "6385:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33125,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33115,
                        "src": "6401:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33121,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33113,
                            "src": "6364:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33120,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "6357:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6357:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "6357:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:52:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33127,
                  "nodeType": "ExpressionStatement",
                  "src": "6357:52:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 33135,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6473:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                ],
                                "id": 33134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6465:7:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 33133,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6465:7:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 33136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6465:13:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 33130,
                                  "name": "_asset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33113,
                                  "src": "6447:6:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 33129,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27517,
                                "src": "6440:6:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 33131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6440:14:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 33132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27456,
                            "src": "6440:24:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 33137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6440:39:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33138,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "6499:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33140,
                            "indexExpression": {
                              "id": 33139,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6514:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6499:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 33141,
                              "name": "totalRecovered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33040,
                              "src": "6524:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33143,
                            "indexExpression": {
                              "id": 33142,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6539:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6524:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6499:47:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6440:106:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172656d6f766520616d6f756e74",
                        "id": 33146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6560:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        },
                        "value": "!remove amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        }
                      ],
                      "id": 33128,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6419:167:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33148,
                  "nodeType": "ExpressionStatement",
                  "src": "6419:167:40"
                }
              ]
            },
            "documentation": {
              "id": 33111,
              "nodeType": "StructuredDocumentation",
              "src": "6180:94:40",
              "text": " @notice Remove funds that should not have been transferred to this contract"
            },
            "functionSelector": "abe7f1ab",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33118,
                "modifierName": {
                  "id": 33117,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "6337:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6337:9:40"
              }
            ],
            "name": "remove",
            "parameters": {
              "id": 33116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33113,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6295:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33112,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6295:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33115,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6311:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6311:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6294:33:40"
            },
            "returnParameters": {
              "id": 33119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6347:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33181,
            "nodeType": "FunctionDefinition",
            "src": "6955:334:40",
            "body": {
              "id": 33180,
              "nodeType": "Block",
              "src": "7072:217:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33166,
                        "name": "_handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33153,
                        "src": "7170:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 33169,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "7188:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          ],
                          "id": 33168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7180:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 33167,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7180:7:40",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 33170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7180:13:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33171,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33157,
                        "src": "7195:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33163,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33155,
                            "src": "7145:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33162,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "7138:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7138:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27576,
                      "src": "7138:31:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 33172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7138:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33173,
                  "nodeType": "ExpressionStatement",
                  "src": "7138:65:40"
                },
                {
                  "expression": {
                    "id": 33178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33174,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "7249:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33176,
                      "indexExpression": {
                        "id": 33175,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33155,
                        "src": "7264:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7249:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33177,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33157,
                      "src": "7275:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7249:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33179,
                  "nodeType": "ExpressionStatement",
                  "src": "7249:33:40"
                }
              ]
            },
            "documentation": {
              "id": 33151,
              "nodeType": "StructuredDocumentation",
              "src": "6599:351:40",
              "text": " @notice Collect funds to be recovered by users\n @param _handler address handling tokens\n @param _asset token to make available to recover\n @param _amount amount to make available to recover\n @dev Prior to the contract owner calling this method,\n the _handler must Approve this contract to spend _amount"
            },
            "functionSelector": "c8fea2fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33160,
                "modifierName": {
                  "id": 33159,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "7062:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7062:9:40"
              }
            ],
            "name": "collect",
            "parameters": {
              "id": 33158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33153,
                  "mutability": "mutable",
                  "name": "_handler",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "6981:16:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6981:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33155,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7007:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7007:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33157,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7031:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6971:81:40"
            },
            "returnParameters": {
              "id": 33161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7072:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33207,
            "nodeType": "FunctionDefinition",
            "src": "7410:214:40",
            "body": {
              "id": 33206,
              "nodeType": "Block",
              "src": "7474:150:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 33191,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33184,
                            "src": "7500:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 33190,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "7492:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 33192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7492:12:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e",
                        "id": 33193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7506:32:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        },
                        "value": "recoverable: nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        }
                      ],
                      "id": 33189,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7484:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7484:55:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33195,
                  "nodeType": "ExpressionStatement",
                  "src": "7484:55:40"
                },
                {
                  "assignments": [
                    33197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33197,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33206,
                      "src": "7549:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33196,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7549:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33201,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33198,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7570:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33200,
                    "indexExpression": {
                      "id": 33199,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33184,
                      "src": "7578:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7570:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:33:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33203,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33197,
                        "src": "7612:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33202,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7599:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7599:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33188,
                  "id": 33205,
                  "nodeType": "Return",
                  "src": "7592:25:40"
                }
              ]
            },
            "documentation": {
              "id": 33182,
              "nodeType": "StructuredDocumentation",
              "src": "7295:110:40",
              "text": " @notice The current total amount of funds that can be recovered by a\n         tokenId"
            },
            "functionSelector": "00c12c31",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recoverable",
            "parameters": {
              "id": 33185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33184,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7431:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7431:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7430:13:40"
            },
            "returnParameters": {
              "id": 33188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33187,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7465:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7465:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7464:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33283,
            "nodeType": "FunctionDefinition",
            "src": "7689:725:40",
            "body": {
              "id": 33282,
              "nodeType": "Block",
              "src": "7729:685:40",
              "statements": [
                {
                  "assignments": [
                    33214
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33214,
                      "mutability": "mutable",
                      "name": "_user",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7739:13:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33213,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7739:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33218,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33216,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "7763:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33215,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23850,
                      "src": "7755:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 33217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7755:12:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7739:28:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 33223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33220,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33214,
                          "src": "7785:5:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 33221,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7794:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "7794:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7785:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f6e6c79204e465420686f6c6465722063616e207265636f766572",
                        "id": 33224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7806:29:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        },
                        "value": "only NFT holder can recover"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        }
                      ],
                      "id": 33219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7777:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7777:59:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33226,
                  "nodeType": "ExpressionStatement",
                  "src": "7777:59:40"
                },
                {
                  "assignments": [
                    33228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33228,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7894:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33227,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7894:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33232,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33229,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7915:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33231,
                    "indexExpression": {
                      "id": 33230,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33210,
                      "src": "7923:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7915:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7894:33:40"
                },
                {
                  "assignments": [
                    33234
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33234,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7937:15:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33233,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7937:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33238,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33236,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33228,
                        "src": "7968:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33235,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7955:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7955:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7937:36:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33240,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "7991:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 33241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8002:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7991:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "63757272656e746c792066756c6c79207265636f7665726564",
                        "id": 33243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8005:27:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        },
                        "value": "currently fully recovered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        }
                      ],
                      "id": 33239,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7983:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7983:50:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33245,
                  "nodeType": "ExpressionStatement",
                  "src": "7983:50:40"
                },
                {
                  "assignments": [
                    33247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33247,
                      "mutability": "mutable",
                      "name": "_asset",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "8121:14:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33246,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8121:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33250,
                  "initialValue": {
                    "expression": {
                      "id": 33248,
                      "name": "_rec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33228,
                      "src": "8138:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record memory"
                      }
                    },
                    "id": 33249,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "asset",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 32823,
                    "src": "8138:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8121:27:40"
                },
                {
                  "expression": {
                    "id": 33255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33251,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "8158:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33253,
                      "indexExpression": {
                        "id": 33252,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8173:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8158:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33254,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33234,
                      "src": "8184:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8158:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33256,
                  "nodeType": "ExpressionStatement",
                  "src": "8158:33:40"
                },
                {
                  "expression": {
                    "id": 33265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 33257,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "8201:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 33259,
                        "indexExpression": {
                          "id": 33258,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33210,
                          "src": "8209:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8201:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 33260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "recovered",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32829,
                      "src": "8201:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33263,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "8234:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8227:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 33261,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "8227:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8227:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "8201:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 33266,
                  "nodeType": "ExpressionStatement",
                  "src": "8201:41:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 33268,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "8288:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 33269,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8293:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33270,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8301:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33271,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8308:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33267,
                      "name": "Recovery",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33055,
                      "src": "8279:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 33272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8279:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33273,
                  "nodeType": "EmitStatement",
                  "src": "8274:42:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33278,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8392:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33279,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8399:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33275,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33247,
                            "src": "8371:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33274,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "8364:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8364:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "8364:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8364:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33281,
                  "nodeType": "ExpressionStatement",
                  "src": "8364:43:40"
                }
              ]
            },
            "documentation": {
              "id": 33208,
              "nodeType": "StructuredDocumentation",
              "src": "7630:54:40",
              "text": " @notice Recover the available funds"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recover",
            "parameters": {
              "id": 33211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33210,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33283,
                  "src": "7707:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7707:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7706:13:40"
            },
            "returnParameters": {
              "id": 33212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7729:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33329,
            "nodeType": "FunctionDefinition",
            "src": "8511:460:40",
            "body": {
              "id": 33328,
              "nodeType": "Block",
              "src": "8585:386:40",
              "statements": [
                {
                  "assignments": [
                    33292
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33292,
                      "mutability": "mutable",
                      "name": "_totalRecoverable",
                      "nodeType": "VariableDeclaration",
                      "scope": 33328,
                      "src": "8595:25:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33291,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8595:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33309,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33293,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "8624:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33296,
                            "indexExpression": {
                              "expression": {
                                "id": 33294,
                                "name": "_rec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33286,
                                "src": "8639:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                  "typeString": "struct NFTAccountant.Record memory"
                                }
                              },
                              "id": 33295,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "asset",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32823,
                              "src": "8639:10:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8624:26:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 33299,
                                  "name": "_rec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33286,
                                  "src": "8673:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                    "typeString": "struct NFTAccountant.Record memory"
                                  }
                                },
                                "id": 33300,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 32825,
                                "src": "8673:11:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 33298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8665:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 33297,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "8665:7:40",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 33301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8665:20:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8624:61:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 33303,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8623:63:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 33304,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "8689:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33307,
                      "indexExpression": {
                        "expression": {
                          "id": 33305,
                          "name": "_rec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33286,
                          "src": "8703:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                            "typeString": "struct NFTAccountant.Record memory"
                          }
                        },
                        "id": 33306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "asset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 32823,
                        "src": "8703:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8689:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8623:91:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8595:119:40"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33310,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8777:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33313,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8805:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33314,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8805:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8797:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8797:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8797:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8777:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33319,
                  "nodeType": "IfStatement",
                  "src": "8773:57:40",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 33317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8829:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 33290,
                    "id": 33318,
                    "nodeType": "Return",
                    "src": "8822:8:40"
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33320,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8921:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33323,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8949:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33324,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8949:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8941:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33321,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8941:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8941:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8921:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33290,
                  "id": 33327,
                  "nodeType": "Return",
                  "src": "8914:50:40"
                }
              ]
            },
            "documentation": {
              "id": 33284,
              "nodeType": "StructuredDocumentation",
              "src": "8420:86:40",
              "text": " @notice The current total amount of funds recoverable for a tokenId"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverable",
            "parameters": {
              "id": 33287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33286,
                  "mutability": "mutable",
                  "name": "_rec",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8533:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                    "typeString": "struct NFTAccountant.Record"
                  },
                  "typeName": {
                    "id": 33285,
                    "name": "Record",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 32830,
                    "src": "8533:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                      "typeString": "struct NFTAccountant.Record"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8532:20:40"
            },
            "returnParameters": {
              "id": 33290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33289,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8576:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8576:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8575:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 33023,
              "name": "NFTAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33021,
              "src": "4112:13:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTAccountant_$33021",
                "typeString": "contract NFTAccountant"
              }
            },
            "id": 33024,
            "nodeType": "InheritanceSpecifier",
            "src": "4112:13:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33022,
          "nodeType": "StructuredDocumentation",
          "src": "4036:33:40",
          "text": "@title NFTRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTRecoveryAccountant",
        "scope": 33523
      },
      {
        "id": 33522,
        "nodeType": "ContractDefinition",
        "src": "9014:2757:40",
        "nodes": [
          {
            "id": 33338,
            "nodeType": "VariableDeclaration",
            "src": "9132:41:40",
            "constant": false,
            "documentation": {
              "id": 33334,
              "nodeType": "StructuredDocumentation",
              "src": "9085:42:40",
              "text": "@notice Maps address to allowed status"
            },
            "functionSelector": "2848aeaf",
            "mutability": "mutable",
            "name": "allowList",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 33337,
              "keyType": {
                "id": 33335,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9140:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9132:24:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 33336,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "9151:4:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33342,
            "nodeType": "VariableDeclaration",
            "src": "9256:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 33339,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "9256:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33341,
              "length": {
                "hexValue": "3439",
                "id": 33340,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "9264:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "9256:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33354,
            "nodeType": "FunctionDefinition",
            "src": "9288:128:40",
            "body": {
              "id": 33353,
              "nodeType": "Block",
              "src": "9414:2:40",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33349,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33344,
                    "src": "9378:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 33350,
                    "name": "_fundsRecipient",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33346,
                    "src": "9393:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33351,
                "modifierName": {
                  "id": 33348,
                  "name": "NFTRecoveryAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33330,
                  "src": "9356:21:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTRecoveryAccountant_$33330_$",
                    "typeString": "type(contract NFTRecoveryAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9356:53:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33344,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9300:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33343,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9300:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33346,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9323:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9323:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9299:48:40"
            },
            "returnParameters": {
              "id": 33352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9414:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33367,
            "nodeType": "ModifierDefinition",
            "src": "9500:96:40",
            "body": {
              "id": 33366,
              "nodeType": "Block",
              "src": "9523:73:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 33358,
                          "name": "allowList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33338,
                          "src": "9541:9:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 33361,
                        "indexExpression": {
                          "expression": {
                            "id": 33359,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "9551:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "9551:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9541:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420616c6c6f776564",
                        "id": 33362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9564:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        },
                        "value": "not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        }
                      ],
                      "id": 33357,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9533:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9533:45:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33364,
                  "nodeType": "ExpressionStatement",
                  "src": "9533:45:40"
                },
                {
                  "id": 33365,
                  "nodeType": "PlaceholderStatement",
                  "src": "9588:1:40"
                }
              ]
            },
            "documentation": {
              "id": 33355,
              "nodeType": "StructuredDocumentation",
              "src": "9422:73:40",
              "text": " @notice Requires that `msg.sender` is on the allowList"
            },
            "name": "onlyAllowed",
            "parameters": {
              "id": 33356,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9520:2:40"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33380,
            "nodeType": "FunctionDefinition",
            "src": "9669:81:40",
            "body": {
              "id": 33379,
              "nodeType": "Block",
              "src": "9720:30:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33376,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33370,
                        "src": "9739:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33375,
                      "name": "_recover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33283,
                      "src": "9730:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 33377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9730:13:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33378,
                  "nodeType": "ExpressionStatement",
                  "src": "9730:13:40"
                }
              ]
            },
            "documentation": {
              "id": 33368,
              "nodeType": "StructuredDocumentation",
              "src": "9602:62:40",
              "text": " @notice Recover available funds for the NFT"
            },
            "functionSelector": "0ca35682",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33373,
                "modifierName": {
                  "id": 33372,
                  "name": "onlyAllowed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33367,
                  "src": "9708:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9708:11:40"
              }
            ],
            "name": "recover",
            "parameters": {
              "id": 33371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33370,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33380,
                  "src": "9686:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9686:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9685:13:40"
            },
            "returnParameters": {
              "id": 33374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9720:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33411,
            "nodeType": "FunctionDefinition",
            "src": "9868:167:40",
            "body": {
              "id": 33410,
              "nodeType": "Block",
              "src": "9927:108:40",
              "statements": [
                {
                  "body": {
                    "id": 33408,
                    "nodeType": "Block",
                    "src": "9979:50:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33400,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "9993:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33404,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33401,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33384,
                                "src": "10003:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33403,
                              "indexExpression": {
                                "id": 33402,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33390,
                                "src": "10008:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10003:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9993:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 33405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10014:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "9993:25:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33407,
                        "nodeType": "ExpressionStatement",
                        "src": "9993:25:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33393,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33390,
                      "src": "9957:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33394,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33384,
                        "src": "9961:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9961:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9957:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33409,
                  "initializationExpression": {
                    "assignments": [
                      33390
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33390,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33409,
                        "src": "9942:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9942:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33392,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9954:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9942:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9974:3:40",
                      "subExpression": {
                        "id": 33397,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33390,
                        "src": "9974:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33399,
                    "nodeType": "ExpressionStatement",
                    "src": "9974:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "9937:92:40"
                }
              ]
            },
            "documentation": {
              "id": 33381,
              "nodeType": "StructuredDocumentation",
              "src": "9756:107:40",
              "text": " @notice Adds addresses to the allow list\n @param _who A list of addresses to allow"
            },
            "functionSelector": "987c5ced",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33387,
                "modifierName": {
                  "id": 33386,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "9917:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9917:9:40"
              }
            ],
            "name": "allow",
            "parameters": {
              "id": 33385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33384,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33411,
                  "src": "9883:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33382,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9883:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33383,
                    "nodeType": "ArrayTypeName",
                    "src": "9883:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9882:25:40"
            },
            "returnParameters": {
              "id": 33388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9927:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33442,
            "nodeType": "FunctionDefinition",
            "src": "10161:171:40",
            "body": {
              "id": 33441,
              "nodeType": "Block",
              "src": "10223:109:40",
              "statements": [
                {
                  "body": {
                    "id": 33439,
                    "nodeType": "Block",
                    "src": "10275:51:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33431,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "10289:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33435,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33432,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33415,
                                "src": "10299:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33434,
                              "indexExpression": {
                                "id": 33433,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33421,
                                "src": "10304:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10299:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10289:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 33436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10310:5:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "10289:26:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33438,
                        "nodeType": "ExpressionStatement",
                        "src": "10289:26:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33424,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33421,
                      "src": "10253:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33425,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33415,
                        "src": "10257:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33426,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10257:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10253:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33440,
                  "initializationExpression": {
                    "assignments": [
                      33421
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33421,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33440,
                        "src": "10238:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33420,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10238:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33423,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10250:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10238:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10270:3:40",
                      "subExpression": {
                        "id": 33428,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33421,
                        "src": "10270:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33430,
                    "nodeType": "ExpressionStatement",
                    "src": "10270:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "10233:93:40"
                }
              ]
            },
            "documentation": {
              "id": 33412,
              "nodeType": "StructuredDocumentation",
              "src": "10041:115:40",
              "text": " @notice Removes addresses from the allow list\n @param _who A list of addresses to disallow"
            },
            "functionSelector": "ca091ef3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33418,
                "modifierName": {
                  "id": 33417,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "10213:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10213:9:40"
              }
            ],
            "name": "disallow",
            "parameters": {
              "id": 33416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33415,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33442,
                  "src": "10179:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33413,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10179:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33414,
                    "nodeType": "ArrayTypeName",
                    "src": "10179:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10178:25:40"
            },
            "returnParameters": {
              "id": 33419,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10223:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33521,
            "nodeType": "FunctionDefinition",
            "src": "11065:704:40",
            "body": {
              "id": 33520,
              "nodeType": "Block",
              "src": "11409:360:40",
              "statements": [
                {
                  "expression": {
                    "id": 33468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33464,
                      "name": "_holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33448,
                      "src": "11419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33466,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11437:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33465,
                        "name": "ownerOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23850,
                        "src": "11429:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) view returns (address)"
                        }
                      },
                      "id": 33467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11429:12:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11419:22:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33469,
                  "nodeType": "ExpressionStatement",
                  "src": "11419:22:40"
                },
                {
                  "expression": {
                    "id": 33474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33470,
                      "name": "_isAllowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33450,
                      "src": "11451:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33471,
                        "name": "allowList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33338,
                        "src": "11464:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 33473,
                      "indexExpression": {
                        "id": 33472,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33448,
                        "src": "11474:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11464:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11451:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33475,
                  "nodeType": "ExpressionStatement",
                  "src": "11451:31:40"
                },
                {
                  "expression": {
                    "id": 33480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33476,
                      "name": "_uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33452,
                      "src": "11492:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33478,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11508:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33477,
                        "name": "tokenURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23938,
                        "src": "11499:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                          "typeString": "function (uint256) view returns (string memory)"
                        }
                      },
                      "id": 33479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11499:13:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "11492:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 33481,
                  "nodeType": "ExpressionStatement",
                  "src": "11492:20:40"
                },
                {
                  "assignments": [
                    33483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33483,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33520,
                      "src": "11522:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33482,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "11522:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33487,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33484,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "11543:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33486,
                    "indexExpression": {
                      "id": 33485,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33445,
                      "src": "11551:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11543:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11522:33:40"
                },
                {
                  "expression": {
                    "id": 33491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33488,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33454,
                      "src": "11565:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33489,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11574:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33490,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "11574:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11565:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33492,
                  "nodeType": "ExpressionStatement",
                  "src": "11565:19:40"
                },
                {
                  "expression": {
                    "id": 33499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33493,
                      "name": "_originalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33456,
                      "src": "11594:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33496,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11620:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33497,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32825,
                          "src": "11620:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11612:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11612:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11612:20:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11594:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33500,
                  "nodeType": "ExpressionStatement",
                  "src": "11594:38:40"
                },
                {
                  "expression": {
                    "id": 33504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33501,
                      "name": "_originalUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33458,
                      "src": "11642:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33502,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11658:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "11658:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11642:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33505,
                  "nodeType": "ExpressionStatement",
                  "src": "11642:33:40"
                },
                {
                  "expression": {
                    "id": 33512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33506,
                      "name": "_recovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33460,
                      "src": "11685:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33509,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11706:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33510,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "11706:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11698:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33507,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11698:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11698:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11685:36:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33513,
                  "nodeType": "ExpressionStatement",
                  "src": "11685:36:40"
                },
                {
                  "expression": {
                    "id": 33518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33514,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33462,
                      "src": "11731:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33516,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11758:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33515,
                        "name": "recoverable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33207,
                        "src": "11746:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 33517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11746:16:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11731:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33519,
                  "nodeType": "ExpressionStatement",
                  "src": "11731:31:40"
                }
              ]
            },
            "documentation": {
              "id": 33443,
              "nodeType": "StructuredDocumentation",
              "src": "10338:722:40",
              "text": " @notice Return all pertinent state information for a tokenId in a single\n         RPC call for convenience\n @return _holder address of the current token holder\n @return _isAllowed TRUE if the current token holder is set on the\n         allowlist & can therefore call recovery\n @return _uri the tokenURI for the NFT\n @return _asset address of the ERC20 asset for this NFT\n @return _originalAmount amount of the bridge transfer which minted this\n         NFT\n @return _originalUser original recipient of the NFT\n @return _recovered total amount recovered thus far from this NFT\n @return _recoverable current amount recoverable for this NFT"
            },
            "functionSelector": "2e340599",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "info",
            "parameters": {
              "id": 33446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33445,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11079:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11079:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11078:13:40"
            },
            "returnParameters": {
              "id": 33463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33448,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11152:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11152:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33450,
                  "mutability": "mutable",
                  "name": "_isAllowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11181:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 33449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11181:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33452,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11210:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 33451,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11210:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33454,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11242:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11242:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33456,
                  "mutability": "mutable",
                  "name": "_originalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11270:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11270:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33458,
                  "mutability": "mutable",
                  "name": "_originalUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11307:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11307:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33460,
                  "mutability": "mutable",
                  "name": "_recovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11342:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11342:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33462,
                  "mutability": "mutable",
                  "name": "_recoverable",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11374:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11374:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11138:266:40"
            },
            "scope": 33522,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 33332,
              "name": "NFTRecoveryAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33330,
              "src": "9057:21:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                "typeString": "contract NFTRecoveryAccountant"
              }
            },
            "id": 33333,
            "nodeType": "InheritanceSpecifier",
            "src": "9057:21:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33330,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33331,
          "nodeType": "StructuredDocumentation",
          "src": "8975:39:40",
          "text": "@title AllowListRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33522,
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "AllowListNFTRecoveryAccountant",
        "scope": 33523
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 40
}