{
  "id": "8a2dce655c4b9b66bbaa0e74b7467111",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.4",
  "solcLongVersion": "0.8.4+commit.c7e474f2",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/Mocks/NFT.sol": {
        "content": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity ^0.8.4;\r\n\r\nimport \"../OneOfOnes.sol\";\r\n\r\ncontract NFT is OneOfOnes {\r\n  constructor() ERC721A(\"NFT\", \"NFT\") {}\r\n}"
      },
      "contracts/OneOfOnes.sol": {
        "content": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity ^0.8.4;\r\n\r\n/**\r\n                   @@@@              @@@@@@@@@(                        \r\n               @@@@@@@@@@@@        @@@@@@@@@@@@@@                      \r\n              @@@@@    @@@@@      @@@@@      @@@@@                     \r\n             @@@@        @@@@     @@@@@      @@@@@                     \r\n             @@@@        @@@@      @@@@@@@@@@@@@@                      \r\n              @@          @@         &@@@@@@@@*                        \r\n                                                                      \r\n                   @@@@                                                \r\n                   @@@@           @@@@        @@@@                     \r\n             @@@@@@@@@@@@@@@@     @@@@       %@@@@                     \r\n              @@@@@@@@@@@@@@       @@@@@@//@@@@@@                      \r\n                   @@@@              @@@@@@@@@@                        \r\n                   @@@@                       \r\n\r\n                  Created by notu @notuart    \r\n */\r\n\r\nimport \"base64-sol/base64.sol\";\r\nimport \"erc721a/contracts/ERC721A.sol\";\r\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\r\n\r\nabstract contract OneOfOnes is ERC721A, Ownable {\r\n  bool public frozen = false;\r\n\r\n  mapping(uint256 => Metadata) private _metadata;\r\n\r\n  struct Metadata {\r\n    string name;\r\n    string description;\r\n    string image;\r\n  }\r\n\r\n  modifier tokenExists(uint256 tokenId) {\r\n    require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\r\n    _;\r\n  }\r\n\r\n  function _startTokenId() internal view virtual override returns (uint256) {\r\n    return 1;\r\n  }\r\n\r\n  function mint(string memory name, string memory description, string memory image, address recipient) external onlyOwner {\r\n    _metadata[_currentIndex] = Metadata(name, description, image);\r\n    _safeMint(recipient, 1);\r\n  }\r\n\r\n  function tokenURI(uint256 tokenId) public view virtual override tokenExists(tokenId) returns (string memory) {\r\n    Metadata memory metadata = _metadata[tokenId];\r\n    \r\n    return string(\r\n      abi.encodePacked(\r\n        'data:application/json;base64,',\r\n        Base64.encode(\r\n          bytes(\r\n            abi.encodePacked('{\"name\":\"', metadata.name, '\", \"description\":\"', metadata.description, '\", \"image\": \"', metadata.image, '\"}')\r\n          )\r\n        )\r\n      )\r\n    );\r\n  }\r\n\r\n  function freeze() external onlyOwner {\r\n    frozen = true;\r\n  }\r\n\r\n  function updateMetadata(uint256 tokenId, string memory name, string memory description, string memory image) public tokenExists(tokenId) onlyOwner {\r\n    require (!frozen, \"ERC721Metadata: metadata is frozen\");\r\n    _metadata[tokenId] = Metadata(name, description, image);\r\n  }\r\n}"
      },
      "base64-sol/base64.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0;\n\n/// @title Base64\n/// @author Brecht Devos - <brecht@loopring.org>\n/// @notice Provides functions for encoding/decoding base64\nlibrary Base64 {\n    string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    bytes  internal constant TABLE_DECODE = hex\"0000000000000000000000000000000000000000000000000000000000000000\"\n                                            hex\"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000\"\n                                            hex\"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000\"\n                                            hex\"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000\";\n\n    function encode(bytes memory data) internal pure returns (string memory) {\n        if (data.length == 0) return '';\n\n        // load the table into memory\n        string memory table = TABLE_ENCODE;\n\n        // multiply by 4/3 rounded up\n        uint256 encodedLen = 4 * ((data.length + 2) / 3);\n\n        // add some extra buffer at the end required for the writing\n        string memory result = new string(encodedLen + 32);\n\n        assembly {\n            // set the actual output length\n            mstore(result, encodedLen)\n\n            // prepare the lookup table\n            let tablePtr := add(table, 1)\n\n            // input ptr\n            let dataPtr := data\n            let endPtr := add(dataPtr, mload(data))\n\n            // result ptr, jump over length\n            let resultPtr := add(result, 32)\n\n            // run over the input, 3 bytes at a time\n            for {} lt(dataPtr, endPtr) {}\n            {\n                // read 3 bytes\n                dataPtr := add(dataPtr, 3)\n                let input := mload(dataPtr)\n\n                // write 4 characters\n                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))\n                resultPtr := add(resultPtr, 1)\n                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))\n                resultPtr := add(resultPtr, 1)\n                mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))\n                resultPtr := add(resultPtr, 1)\n                mstore8(resultPtr, mload(add(tablePtr, and(        input,  0x3F))))\n                resultPtr := add(resultPtr, 1)\n            }\n\n            // padding with '='\n            switch mod(mload(data), 3)\n            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }\n            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }\n        }\n\n        return result;\n    }\n\n    function decode(string memory _data) internal pure returns (bytes memory) {\n        bytes memory data = bytes(_data);\n\n        if (data.length == 0) return new bytes(0);\n        require(data.length % 4 == 0, \"invalid base64 decoder input\");\n\n        // load the table into memory\n        bytes memory table = TABLE_DECODE;\n\n        // every 4 characters represent 3 bytes\n        uint256 decodedLen = (data.length / 4) * 3;\n\n        // add some extra buffer at the end required for the writing\n        bytes memory result = new bytes(decodedLen + 32);\n\n        assembly {\n            // padding with '='\n            let lastBytes := mload(add(data, mload(data)))\n            if eq(and(lastBytes, 0xFF), 0x3d) {\n                decodedLen := sub(decodedLen, 1)\n                if eq(and(lastBytes, 0xFFFF), 0x3d3d) {\n                    decodedLen := sub(decodedLen, 1)\n                }\n            }\n\n            // set the actual output length\n            mstore(result, decodedLen)\n\n            // prepare the lookup table\n            let tablePtr := add(table, 1)\n\n            // input ptr\n            let dataPtr := data\n            let endPtr := add(dataPtr, mload(data))\n\n            // result ptr, jump over length\n            let resultPtr := add(result, 32)\n\n            // run over the input, 4 characters at a time\n            for {} lt(dataPtr, endPtr) {}\n            {\n               // read 4 characters\n               dataPtr := add(dataPtr, 4)\n               let input := mload(dataPtr)\n\n               // write 3 bytes\n               let output := add(\n                   add(\n                       shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),\n                       shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),\n                   add(\n                       shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),\n                               and(mload(add(tablePtr, and(        input , 0xFF))), 0xFF)\n                    )\n                )\n                mstore(resultPtr, shl(232, output))\n                resultPtr := add(resultPtr, 3)\n            }\n        }\n\n        return result;\n    }\n}\n"
      },
      "erc721a/contracts/ERC721A.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// Creator: Chiru Labs\n\npragma solidity ^0.8.4;\n\nimport '@openzeppelin/contracts/token/ERC721/IERC721.sol';\nimport '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol';\nimport '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';\nimport '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol';\nimport '@openzeppelin/contracts/utils/Address.sol';\nimport '@openzeppelin/contracts/utils/Context.sol';\nimport '@openzeppelin/contracts/utils/Strings.sol';\nimport '@openzeppelin/contracts/utils/introspection/ERC165.sol';\n\nerror ApprovalCallerNotOwnerNorApproved();\nerror ApprovalQueryForNonexistentToken();\nerror ApproveToCaller();\nerror ApprovalToCurrentOwner();\nerror BalanceQueryForZeroAddress();\nerror MintedQueryForZeroAddress();\nerror BurnedQueryForZeroAddress();\nerror AuxQueryForZeroAddress();\nerror MintToZeroAddress();\nerror MintZeroQuantity();\nerror OwnerIndexOutOfBounds();\nerror OwnerQueryForNonexistentToken();\nerror TokenIndexOutOfBounds();\nerror TransferCallerNotOwnerNorApproved();\nerror TransferFromIncorrectOwner();\nerror TransferToNonERC721ReceiverImplementer();\nerror TransferToZeroAddress();\nerror URIQueryForNonexistentToken();\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension. Built to optimize for lower gas during batch mints.\n *\n * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).\n *\n * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.\n *\n * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).\n */\ncontract ERC721A is Context, ERC165, IERC721, IERC721Metadata {\n    using Address for address;\n    using Strings for uint256;\n\n    // Compiler will pack this into a single 256bit word.\n    struct TokenOwnership {\n        // The address of the owner.\n        address addr;\n        // Keeps track of the start time of ownership with minimal overhead for tokenomics.\n        uint64 startTimestamp;\n        // Whether the token has been burned.\n        bool burned;\n    }\n\n    // Compiler will pack this into a single 256bit word.\n    struct AddressData {\n        // Realistically, 2**64-1 is more than enough.\n        uint64 balance;\n        // Keeps track of mint count with minimal overhead for tokenomics.\n        uint64 numberMinted;\n        // Keeps track of burn count with minimal overhead for tokenomics.\n        uint64 numberBurned;\n        // For miscellaneous variable(s) pertaining to the address\n        // (e.g. number of whitelist mint slots used).\n        // If there are multiple variables, please pack them into a uint64.\n        uint64 aux;\n    }\n\n    // The tokenId of the next token to be minted.\n    uint256 internal _currentIndex;\n\n    // The number of tokens burned.\n    uint256 internal _burnCounter;\n\n    // Token name\n    string private _name;\n\n    // Token symbol\n    string private _symbol;\n\n    // Mapping from token ID to ownership details\n    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.\n    mapping(uint256 => TokenOwnership) internal _ownerships;\n\n    // Mapping owner address to address data\n    mapping(address => AddressData) private _addressData;\n\n    // Mapping from token ID to approved address\n    mapping(uint256 => address) private _tokenApprovals;\n\n    // Mapping from owner to operator approvals\n    mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n        _currentIndex = _startTokenId();\n    }\n\n    /**\n     * To change the starting tokenId, please override this function.\n     */\n    function _startTokenId() internal view virtual returns (uint256) {\n        return 0;\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-totalSupply}.\n     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.\n     */\n    function totalSupply() public view returns (uint256) {\n        // Counter underflow is impossible as _burnCounter cannot be incremented\n        // more than _currentIndex - _startTokenId() times\n        unchecked {\n            return _currentIndex - _burnCounter - _startTokenId();\n        }\n    }\n\n    /**\n     * Returns the total amount of tokens minted in the contract.\n     */\n    function _totalMinted() internal view returns (uint256) {\n        // Counter underflow is impossible as _currentIndex does not decrement,\n        // and it is initialized to _startTokenId()\n        unchecked {\n            return _currentIndex - _startTokenId();\n        }\n    }\n\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n        return\n            interfaceId == type(IERC721).interfaceId ||\n            interfaceId == type(IERC721Metadata).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC721-balanceOf}.\n     */\n    function balanceOf(address owner) public view override returns (uint256) {\n        if (owner == address(0)) revert BalanceQueryForZeroAddress();\n        return uint256(_addressData[owner].balance);\n    }\n\n    /**\n     * Returns the number of tokens minted by `owner`.\n     */\n    function _numberMinted(address owner) internal view returns (uint256) {\n        if (owner == address(0)) revert MintedQueryForZeroAddress();\n        return uint256(_addressData[owner].numberMinted);\n    }\n\n    /**\n     * Returns the number of tokens burned by or on behalf of `owner`.\n     */\n    function _numberBurned(address owner) internal view returns (uint256) {\n        if (owner == address(0)) revert BurnedQueryForZeroAddress();\n        return uint256(_addressData[owner].numberBurned);\n    }\n\n    /**\n     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).\n     */\n    function _getAux(address owner) internal view returns (uint64) {\n        if (owner == address(0)) revert AuxQueryForZeroAddress();\n        return _addressData[owner].aux;\n    }\n\n    /**\n     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).\n     * If there are multiple variables, please pack them into a uint64.\n     */\n    function _setAux(address owner, uint64 aux) internal {\n        if (owner == address(0)) revert AuxQueryForZeroAddress();\n        _addressData[owner].aux = aux;\n    }\n\n    /**\n     * Gas spent here starts off proportional to the maximum mint batch size.\n     * It gradually moves to O(1) as tokens get transferred around in the collection over time.\n     */\n    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {\n        uint256 curr = tokenId;\n\n        unchecked {\n            if (_startTokenId() <= curr && curr < _currentIndex) {\n                TokenOwnership memory ownership = _ownerships[curr];\n                if (!ownership.burned) {\n                    if (ownership.addr != address(0)) {\n                        return ownership;\n                    }\n                    // Invariant:\n                    // There will always be an ownership that has an address and is not burned\n                    // before an ownership that does not have an address and is not burned.\n                    // Hence, curr will not underflow.\n                    while (true) {\n                        curr--;\n                        ownership = _ownerships[curr];\n                        if (ownership.addr != address(0)) {\n                            return ownership;\n                        }\n                    }\n                }\n            }\n        }\n        revert OwnerQueryForNonexistentToken();\n    }\n\n    /**\n     * @dev See {IERC721-ownerOf}.\n     */\n    function ownerOf(uint256 tokenId) public view override returns (address) {\n        return ownershipOf(tokenId).addr;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-name}.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-symbol}.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();\n\n        string memory baseURI = _baseURI();\n        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';\n    }\n\n    /**\n     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n     * by default, can be overriden in child contracts.\n     */\n    function _baseURI() internal view virtual returns (string memory) {\n        return '';\n    }\n\n    /**\n     * @dev See {IERC721-approve}.\n     */\n    function approve(address to, uint256 tokenId) public override {\n        address owner = ERC721A.ownerOf(tokenId);\n        if (to == owner) revert ApprovalToCurrentOwner();\n\n        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {\n            revert ApprovalCallerNotOwnerNorApproved();\n        }\n\n        _approve(to, tokenId, owner);\n    }\n\n    /**\n     * @dev See {IERC721-getApproved}.\n     */\n    function getApproved(uint256 tokenId) public view override returns (address) {\n        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();\n\n        return _tokenApprovals[tokenId];\n    }\n\n    /**\n     * @dev See {IERC721-setApprovalForAll}.\n     */\n    function setApprovalForAll(address operator, bool approved) public override {\n        if (operator == _msgSender()) revert ApproveToCaller();\n\n        _operatorApprovals[_msgSender()][operator] = approved;\n        emit ApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /**\n     * @dev See {IERC721-isApprovedForAll}.\n     */\n    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n        return _operatorApprovals[owner][operator];\n    }\n\n    /**\n     * @dev See {IERC721-transferFrom}.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 tokenId\n    ) public virtual override {\n        _transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(\n        address from,\n        address to,\n        uint256 tokenId\n    ) public virtual override {\n        safeTransferFrom(from, to, tokenId, '');\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(\n        address from,\n        address to,\n        uint256 tokenId,\n        bytes memory _data\n    ) public virtual override {\n        _transfer(from, to, tokenId);\n        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {\n            revert TransferToNonERC721ReceiverImplementer();\n        }\n    }\n\n    /**\n     * @dev Returns whether `tokenId` exists.\n     *\n     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n     *\n     * Tokens start existing when they are minted (`_mint`),\n     */\n    function _exists(uint256 tokenId) internal view returns (bool) {\n        return _startTokenId() <= tokenId && tokenId < _currentIndex &&\n            !_ownerships[tokenId].burned;\n    }\n\n    function _safeMint(address to, uint256 quantity) internal {\n        _safeMint(to, quantity, '');\n    }\n\n    /**\n     * @dev Safely mints `quantity` tokens and transfers them to `to`.\n     *\n     * Requirements:\n     *\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.\n     * - `quantity` must be greater than 0.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeMint(\n        address to,\n        uint256 quantity,\n        bytes memory _data\n    ) internal {\n        _mint(to, quantity, _data, true);\n    }\n\n    /**\n     * @dev Mints `quantity` tokens and transfers them to `to`.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `quantity` must be greater than 0.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _mint(\n        address to,\n        uint256 quantity,\n        bytes memory _data,\n        bool safe\n    ) internal {\n        uint256 startTokenId = _currentIndex;\n        if (to == address(0)) revert MintToZeroAddress();\n        if (quantity == 0) revert MintZeroQuantity();\n\n        _beforeTokenTransfers(address(0), to, startTokenId, quantity);\n\n        // Overflows are incredibly unrealistic.\n        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1\n        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1\n        unchecked {\n            _addressData[to].balance += uint64(quantity);\n            _addressData[to].numberMinted += uint64(quantity);\n\n            _ownerships[startTokenId].addr = to;\n            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);\n\n            uint256 updatedIndex = startTokenId;\n            uint256 end = updatedIndex + quantity;\n\n            if (safe && to.isContract()) {\n                do {\n                    emit Transfer(address(0), to, updatedIndex);\n                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {\n                        revert TransferToNonERC721ReceiverImplementer();\n                    }\n                } while (updatedIndex != end);\n                // Reentrancy protection\n                if (_currentIndex != startTokenId) revert();\n            } else {\n                do {\n                    emit Transfer(address(0), to, updatedIndex++);\n                } while (updatedIndex != end);\n            }\n            _currentIndex = updatedIndex;\n        }\n        _afterTokenTransfers(address(0), to, startTokenId, quantity);\n    }\n\n    /**\n     * @dev Transfers `tokenId` from `from` to `to`.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 tokenId\n    ) private {\n        TokenOwnership memory prevOwnership = ownershipOf(tokenId);\n\n        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||\n            isApprovedForAll(prevOwnership.addr, _msgSender()) ||\n            getApproved(tokenId) == _msgSender());\n\n        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();\n        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();\n        if (to == address(0)) revert TransferToZeroAddress();\n\n        _beforeTokenTransfers(from, to, tokenId, 1);\n\n        // Clear approvals from the previous owner\n        _approve(address(0), tokenId, prevOwnership.addr);\n\n        // Underflow of the sender's balance is impossible because we check for\n        // ownership above and the recipient's balance can't realistically overflow.\n        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.\n        unchecked {\n            _addressData[from].balance -= 1;\n            _addressData[to].balance += 1;\n\n            _ownerships[tokenId].addr = to;\n            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);\n\n            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.\n            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.\n            uint256 nextTokenId = tokenId + 1;\n            if (_ownerships[nextTokenId].addr == address(0)) {\n                // This will suffice for checking _exists(nextTokenId),\n                // as a burned slot cannot contain the zero address.\n                if (nextTokenId < _currentIndex) {\n                    _ownerships[nextTokenId].addr = prevOwnership.addr;\n                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;\n                }\n            }\n        }\n\n        emit Transfer(from, to, tokenId);\n        _afterTokenTransfers(from, to, tokenId, 1);\n    }\n\n    /**\n     * @dev Destroys `tokenId`.\n     * The approval is cleared when the token is burned.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _burn(uint256 tokenId) internal virtual {\n        TokenOwnership memory prevOwnership = ownershipOf(tokenId);\n\n        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);\n\n        // Clear approvals from the previous owner\n        _approve(address(0), tokenId, prevOwnership.addr);\n\n        // Underflow of the sender's balance is impossible because we check for\n        // ownership above and the recipient's balance can't realistically overflow.\n        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.\n        unchecked {\n            _addressData[prevOwnership.addr].balance -= 1;\n            _addressData[prevOwnership.addr].numberBurned += 1;\n\n            // Keep track of who burned the token, and the timestamp of burning.\n            _ownerships[tokenId].addr = prevOwnership.addr;\n            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);\n            _ownerships[tokenId].burned = true;\n\n            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.\n            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.\n            uint256 nextTokenId = tokenId + 1;\n            if (_ownerships[nextTokenId].addr == address(0)) {\n                // This will suffice for checking _exists(nextTokenId),\n                // as a burned slot cannot contain the zero address.\n                if (nextTokenId < _currentIndex) {\n                    _ownerships[nextTokenId].addr = prevOwnership.addr;\n                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;\n                }\n            }\n        }\n\n        emit Transfer(prevOwnership.addr, address(0), tokenId);\n        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);\n\n        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.\n        unchecked {\n            _burnCounter++;\n        }\n    }\n\n    /**\n     * @dev Approve `to` to operate on `tokenId`\n     *\n     * Emits a {Approval} event.\n     */\n    function _approve(\n        address to,\n        uint256 tokenId,\n        address owner\n    ) private {\n        _tokenApprovals[tokenId] = to;\n        emit Approval(owner, to, tokenId);\n    }\n\n    /**\n     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.\n     *\n     * @param from address representing the previous owner of the given token ID\n     * @param to target address that will receive the tokens\n     * @param tokenId uint256 ID of the token to be transferred\n     * @param _data bytes optional data to send along with the call\n     * @return bool whether the call correctly returned the expected magic value\n     */\n    function _checkContractOnERC721Received(\n        address from,\n        address to,\n        uint256 tokenId,\n        bytes memory _data\n    ) private returns (bool) {\n        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n            return retval == IERC721Receiver(to).onERC721Received.selector;\n        } catch (bytes memory reason) {\n            if (reason.length == 0) {\n                revert TransferToNonERC721ReceiverImplementer();\n            } else {\n                assembly {\n                    revert(add(32, reason), mload(reason))\n                }\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.\n     * And also called before burning one token.\n     *\n     * startTokenId - the first token id to be transferred\n     * quantity - the amount to be transferred\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be\n     * transferred to `to`.\n     * - When `from` is zero, `tokenId` will be minted for `to`.\n     * - When `to` is zero, `tokenId` will be burned by `from`.\n     * - `from` and `to` are never both zero.\n     */\n    function _beforeTokenTransfers(\n        address from,\n        address to,\n        uint256 startTokenId,\n        uint256 quantity\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes\n     * minting.\n     * And also called after one token has been burned.\n     *\n     * startTokenId - the first token id to be transferred\n     * quantity - the amount to be transferred\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been\n     * transferred to `to`.\n     * - When `from` is zero, `tokenId` has been minted for `to`.\n     * - When `to` is zero, `tokenId` has been burned by `from`.\n     * - `from` and `to` are never both zero.\n     */\n    function _afterTokenTransfers(\n        address from,\n        address to,\n        uint256 startTokenId,\n        uint256 quantity\n    ) internal virtual {}\n}\n"
      },
      "@openzeppelin/contracts/access/Ownable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() {\n        _transferOwnership(_msgSender());\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n    /**\n     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n     */\n    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n    /**\n     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n     */\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n    /**\n     * @dev Returns the number of tokens in ``owner``'s account.\n     */\n    function balanceOf(address owner) external view returns (uint256 balance);\n\n    /**\n     * @dev Returns the owner of the `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function ownerOf(uint256 tokenId) external view returns (address owner);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(\n        address from,\n        address to,\n        uint256 tokenId\n    ) external;\n\n    /**\n     * @dev Transfers `tokenId` token from `from` to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 tokenId\n    ) external;\n\n    /**\n     * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n     * The approval is cleared when the token is transferred.\n     *\n     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n     *\n     * Requirements:\n     *\n     * - The caller must own the token or be an approved operator.\n     * - `tokenId` must exist.\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address to, uint256 tokenId) external;\n\n    /**\n     * @dev Returns the account approved for `tokenId` token.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function getApproved(uint256 tokenId) external view returns (address operator);\n\n    /**\n     * @dev Approve or remove `operator` as an operator for the caller.\n     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n     *\n     * Requirements:\n     *\n     * - The `operator` cannot be the caller.\n     *\n     * Emits an {ApprovalForAll} event.\n     */\n    function setApprovalForAll(address operator, bool _approved) external;\n\n    /**\n     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n     *\n     * See {setApprovalForAll}\n     */\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function safeTransferFrom(\n        address from,\n        address to,\n        uint256 tokenId,\n        bytes calldata data\n    ) external;\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n    /**\n     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n     * by `operator` from `from`, this function is called.\n     *\n     * It must return its Solidity selector to confirm the token transfer.\n     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n     *\n     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n     */\n    function onERC721Received(\n        address operator,\n        address from,\n        uint256 tokenId,\n        bytes calldata data\n    ) external returns (bytes4);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Metadata is IERC721 {\n    /**\n     * @dev Returns the token collection name.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the token collection symbol.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n     */\n    function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC721.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721Enumerable is IERC721 {\n    /**\n     * @dev Returns the total amount of tokens stored by the contract.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n     */\n    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);\n\n    /**\n     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n     * Use along with {totalSupply} to enumerate all tokens.\n     */\n    function tokenByIndex(uint256 index) external view returns (uint256);\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n     */\n    function toString(uint256 value) internal pure returns (string memory) {\n        // Inspired by OraclizeAPI's implementation - MIT licence\n        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n        if (value == 0) {\n            return \"0\";\n        }\n        uint256 temp = value;\n        uint256 digits;\n        while (temp != 0) {\n            digits++;\n            temp /= 10;\n        }\n        bytes memory buffer = new bytes(digits);\n        while (value != 0) {\n            digits -= 1;\n            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n            value /= 10;\n        }\n        return string(buffer);\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n     */\n    function toHexString(uint256 value) internal pure returns (string memory) {\n        if (value == 0) {\n            return \"0x00\";\n        }\n        uint256 temp = value;\n        uint256 length = 0;\n        while (temp != 0) {\n            length++;\n            temp >>= 8;\n        }\n        return toHexString(value, length);\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n     */\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n        bytes memory buffer = new bytes(2 * length + 2);\n        buffer[0] = \"0\";\n        buffer[1] = \"x\";\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\n            buffer[i] = _HEX_SYMBOLS[value & 0xf];\n            value >>= 4;\n        }\n        require(value == 0, \"Strings: hex length insufficient\");\n        return string(buffer);\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n    /**\n     * @dev See {IERC165-supportsInterface}.\n     */\n    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n        return interfaceId == type(IERC165).interfaceId;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 800
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "Ownable": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "IERC721": {
          "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "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": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"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\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "IERC721Receiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "onERC721Received",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "onERC721Received(address,address,uint256,bytes)": "150b7a02"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for any contract that wants to support safeTransfers from ERC721 asset contracts.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\"}},\"title\":\"ERC721 token receiver interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "IERC721Enumerable": {
          "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "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": [
                {
                  "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": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "tokenByIndex(uint256)": "4f6ccce7",
              "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"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\":[{\"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\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"tokenByIndex(uint256)\":{\"details\":\"Returns a token ID at a given `index` of all the tokens stored by the contract. Use along with {totalSupply} to enumerate all tokens.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"Returns a token ID owned by `owner` at a given `index` of its token list. Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\"},\"totalSupply()\":{\"details\":\"Returns the total amount of tokens stored by the contract.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional enumeration extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":\"IERC721Enumerable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "IERC721Metadata": {
          "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe845ec66c7b0558f2343a490a014ca1e4b655f3a786d9e7f6d02156668fb86c64736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID DUP5 0x5E 0xC6 PUSH13 0x7B0558F2343A490A014CA1E4B6 SSTORE RETURN 0xA7 DUP7 0xD9 0xE7 0xF6 0xD0 0x21 JUMP PUSH7 0x8FB86C64736F6C PUSH4 0x43000804 STOP CALLER ",
              "sourceMap": "194:8061:5:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8061:5;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fe845ec66c7b0558f2343a490a014ca1e4b655f3a786d9e7f6d02156668fb86c64736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID DUP5 0x5E 0xC6 PUSH13 0x7B0558F2343A490A014CA1E4B6 SSTORE RETURN 0xA7 DUP7 0xD9 0xE7 0xF6 0xD0 0x21 JUMP PUSH7 0x8FB86C64736F6C PUSH4 0x43000804 STOP CALLER ",
              "sourceMap": "194:8061:5:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "Strings": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220301eaed6aedb79b57cc89abca28b0a513fbd7ebdcce85a94eafd69607a0b259364736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS 0x1E 0xAE 0xD6 0xAE 0xDB PUSH26 0xB57CC89ABCA28B0A513FBD7EBDCCE85A94EAFD69607A0B259364 PUSH20 0x6F6C634300080400330000000000000000000000 ",
              "sourceMap": "146:1885:7:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;146:1885:7;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220301eaed6aedb79b57cc89abca28b0a513fbd7ebdcce85a94eafd69607a0b259364736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS 0x1E 0xAE 0xD6 0xAE 0xDB PUSH26 0xB57CC89ABCA28B0A513FBD7EBDCCE85A94EAFD69607A0B259364 PUSH20 0x6F6C634300080400330000000000000000000000 ",
              "sourceMap": "146:1885:7:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "IERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}"
        }
      },
      "base64-sol/base64.sol": {
        "Base64": {
          "abi": [],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b6e75bd09840fd14841551df289999f9c5d4ccfd51ae952aef2b3fc1df44eea64736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 PUSH15 0x75BD09840FD14841551DF289999F9C 0x5D 0x4C 0xCF 0xD5 BYTE 0xE9 MSTORE 0xAE CALLCODE 0xB3 0xFC SAR DELEGATECALL 0x4E 0xEA PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "186:4638:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;186:4638:10;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b6e75bd09840fd14841551df289999f9c5d4ccfd51ae952aef2b3fc1df44eea64736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 PUSH15 0x75BD09840FD14841551DF289999F9C 0x5D 0x4C 0xCF 0xD5 BYTE 0xE9 MSTORE 0xAE CALLCODE 0xB3 0xFC SAR DELEGATECALL 0x4E 0xEA PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "186:4638:10:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Brecht Devos - <brecht@loopring.org>\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Base64\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions for encoding/decoding base64\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"base64-sol/base64.sol\":\"Base64\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"base64-sol/base64.sol\":{\"keccak256\":\"0xa73959e6ef0b693e4423a562e612370160b934a75e618361ddd8c9c4b8ddbaaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c12e16d8d66f3af15d8787920bd41ca6c1e7517a212a6b9cebd4b6d38f36fe\",\"dweb:/ipfs/QmcXMnZUXEz6LRKsm3CSvqdPboAzmezavi8bTg2dRxM2yE\"]}},\"version\":1}"
        }
      },
      "contracts/Mocks/NFT.sol": {
        "NFT": {
          "abi": [
            {
              "inputs": [],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "ApprovalCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalToCurrentOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApproveToCaller",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BalanceQueryForZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MintToZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MintZeroQuantity",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OwnerQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferFromIncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToNonERC721ReceiverImplementer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToZeroAddress",
              "type": "error"
            },
            {
              "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": "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": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "freeze",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "frozen",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "description",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "image",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "description",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "image",
                  "type": "string"
                }
              ],
              "name": "updateMetadata",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:396:14",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:14",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "69:325:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "79:22:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "93:1:14",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "96:4:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "89:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "89:12:14"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "79:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "110:38:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "140:4:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "146:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "136:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "136:12:14"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "114:18:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "187:31:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "189:27:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "203:6:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "211:4:14",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "199:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "199:17:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "189:6:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "167:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "160:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "160:26:14"
                              },
                              "nodeType": "YulIf",
                              "src": "157:2:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "277:111:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "298:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "305:3:14",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "310:10:14",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "301:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "301:20:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "291:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "291:31:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "291:31:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "342:1:14",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "345:4:14",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "335:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "335:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "335:15:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "370:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "373:4:14",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "363:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "363:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "363:15:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "233:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "256:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "264:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "253:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "253:14:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "230:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "230:38:14"
                              },
                              "nodeType": "YulIf",
                              "src": "227:2:14"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "49:4:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "58:6:14",
                            "type": ""
                          }
                        ],
                        "src": "14:380:14"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}",
                  "id": 14,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040526008805460ff60a01b191690553480156200001e57600080fd5b5060408051808201825260038082526213919560ea1b6020808401828152855180870190965292855284015281519192916200005d91600291620000de565b50805162000073906003906020840190620000de565b505060016000555062000086336200008c565b620001c1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000ec9062000184565b90600052602060002090601f0160209004810192826200011057600085556200015b565b82601f106200012b57805160ff19168380011785556200015b565b828001600101855582156200015b579182015b828111156200015b5782518255916020019190600101906200013e565b50620001699291506200016d565b5090565b5b808211156200016957600081556001016200016e565b600181811c908216806200019957607f821691505b60208210811415620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b611d3580620001d16000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80636352211e116100d8578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd146102e8578063e985e9c5146102fb578063f2fde38b1461033757600080fd5b8063a22cb465146102af578063b88d4fde146102c2578063c401aa99146102d557600080fd5b8063715018a6116100bd578063715018a61461028e5780638da5cb5b1461029657806395d89b41146102a757600080fd5b80636352211e1461026857806370a082311461027b57600080fd5b806318160ddd1161012f5780632aedc3f9116101145780632aedc3f91461023a57806342842e0e1461024d57806362a5af3b1461026057600080fd5b806318160ddd1461020d57806323b872dd1461022757600080fd5b806306fdde031161016057806306fdde03146101b8578063081812fc146101cd578063095ea7b3146101f857600080fd5b806301ffc9a71461017c578063054f7d9c146101a4575b600080fd5b61018f61018a3660046118cf565b61034a565b60405190151581526020015b60405180910390f35b60085461018f90600160a01b900460ff1681565b6101c061039c565b60405161019b9190611bb2565b6101e06101db36600461199c565b61042e565b6040516001600160a01b03909116815260200161019b565b61020b6102063660046118a6565b610472565b005b60015460005403600019015b60405190815260200161019b565b61020b6102353660046117b8565b610500565b61020b610248366004611907565b61050b565b61020b61025b3660046117b8565b6105f2565b61020b61060d565b6101e061027636600461199c565b610697565b61021961028936600461176c565b6106a9565b61020b6106f8565b6008546001600160a01b03166101e0565b6101c061075e565b61020b6102bd36600461186c565b61076d565b61020b6102d03660046117f3565b610803565b61020b6102e33660046119b4565b61084e565b6101c06102f636600461199c565b6109f7565b61018f610309366004611786565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020b61034536600461176c565b610c97565b60006001600160e01b031982166380ac58cd60e01b148061037b57506001600160e01b03198216635b5e139f60e01b145b8061039657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546103ab90611c48565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611c48565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050905090565b600061043982610d79565b610456576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061047d82610697565b9050806001600160a01b0316836001600160a01b031614156104b25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906104d257506104d08133610309565b155b156104f0576040516367d9dca160e11b815260040160405180910390fd5b6104fb838383610db2565b505050565b6104fb838383610e1b565b6008546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604080516060810182528581526020808201869052818301859052600080548152600982529290922081518051929391926105a8928492019061161b565b5060208281015180516105c1926001850192019061161b565b50604082015180516105dd91600284019160209091019061161b565b509050506105ec816001611031565b50505050565b6104fb83838360405180602001604052806000815250610803565b6008546001600160a01b031633146106675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b60006106a28261104f565b5192915050565b60006001600160a01b0382166106d2576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b61075c6000611178565b565b6060600380546103ab90611c48565b6001600160a01b0382163314156107975760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61080e848484610e1b565b6001600160a01b0383163b15158015610830575061082e848484846111d7565b155b156105ec576040516368d2bf6b60e11b815260040160405180910390fd5b8361085881610d79565b6108bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b6008546001600160a01b031633146109165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600854600160a01b900460ff161561097b5760405162461bcd60e51b815260206004820152602260248201527f4552433732314d657461646174613a206d657461646174612069732066726f7a60448201526132b760f11b6064820152608401610561565b6040805160608101825285815260208082018690528183018590526000888152600982529290922081518051929391926109b8928492019061161b565b5060208281015180516109d1926001850192019061161b565b50604082015180516109ed91600284019160209091019061161b565b5050505050505050565b606081610a0381610d79565b610a675760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b600083815260096020526040808220815160608101909252805482908290610a8e90611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90611c48565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b50505050508152602001600182018054610b2090611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4c90611c48565b8015610b995780601f10610b6e57610100808354040283529160200191610b99565b820191906000526020600020905b815481529060010190602001808311610b7c57829003601f168201915b50505050508152602001600282018054610bb290611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90611c48565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050815250509050610c6e816000015182602001518360400151604051602001610c5a93929190611a62565b6040516020818303038152906040526112ce565b604051602001610c7e9190611b31565b6040516020818303038152906040529250505b50919050565b6008546001600160a01b03163314610cf15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610561565b610d7681611178565b50565b600081600111158015610d8d575060005482105b8015610396575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610e268261104f565b80519091506000906001600160a01b0316336001600160a01b03161480610e5457508151610e549033610309565b80610e6f575033610e648461042e565b6001600160a01b0316145b905080610e8f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614610ec45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416610eeb57604051633a954ecd60e21b815260040160405180910390fd5b610efb6000848460000151610db2565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116610fe757600054811015610fe7578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61104b828260405180602001604052806000815250611442565b5050565b6040805160608101825260008082526020820181905291810191909152818060011115801561107f575060005481105b1561115f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061115d5780516001600160a01b0316156110f3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611158579392505050565b6110f3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061120c903390899088908890600401611b76565b602060405180830381600087803b15801561122657600080fd5b505af1925050508015611256575060408051601f3d908101601f19168201909252611253918101906118eb565b60015b6112b1573d808015611284576040519150601f19603f3d011682016040523d82523d6000602084013e611289565b606091505b5080516112a9576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600014156112ee57505060408051602081019091526000815290565b6000604051806060016040528060408152602001611cc0604091399050600060038451600261131d9190611bc5565b6113279190611bdd565b611332906004611bfd565b90506000611341826020611bc5565b67ffffffffffffffff81111561136757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611391576020820181803683370190505b509050818152600183018586518101602084015b818310156113fd576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113a5565b600389510660018114611417576002811461142857611434565b613d3d60f01b600119830152611434565b603d60f81b6000198301525b509398975050505050505050565b6104fb83838360016000546001600160a01b03851661147357604051622e076360e81b815260040160405180910390fd5b836114915760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154357506001600160a01b0387163b15155b156115cc575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159460008884806001019550886111d7565b6115b1576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115495782600054146115c757600080fd5b611612565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115cd575b5060005561102a565b82805461162790611c48565b90600052602060002090601f016020900481019282611649576000855561168f565b82601f1061166257805160ff191683800117855561168f565b8280016001018555821561168f579182015b8281111561168f578251825591602001919060010190611674565b5061169b92915061169f565b5090565b5b8082111561169b57600081556001016116a0565b600067ffffffffffffffff808411156116cf576116cf611c93565b604051601f8501601f19908116603f011681019082821181831017156116f7576116f7611c93565b8160405280935085815286868601111561171057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461174157600080fd5b919050565b600082601f830112611756578081fd5b611765838335602085016116b4565b9392505050565b60006020828403121561177d578081fd5b6117658261172a565b60008060408385031215611798578081fd5b6117a18361172a565b91506117af6020840161172a565b90509250929050565b6000806000606084860312156117cc578081fd5b6117d58461172a565b92506117e36020850161172a565b9150604084013590509250925092565b60008060008060808587031215611808578081fd5b6118118561172a565b935061181f6020860161172a565b925060408501359150606085013567ffffffffffffffff811115611841578182fd5b8501601f81018713611851578182fd5b611860878235602084016116b4565b91505092959194509250565b6000806040838503121561187e578182fd5b6118878361172a565b91506020830135801515811461189b578182fd5b809150509250929050565b600080604083850312156118b8578182fd5b6118c18361172a565b946020939093013593505050565b6000602082840312156118e0578081fd5b813561176581611ca9565b6000602082840312156118fc578081fd5b815161176581611ca9565b6000806000806080858703121561191c578384fd5b843567ffffffffffffffff80821115611933578586fd5b61193f88838901611746565b95506020870135915080821115611954578485fd5b61196088838901611746565b94506040870135915080821115611975578384fd5b5061198287828801611746565b9250506119916060860161172a565b905092959194509250565b6000602082840312156119ad578081fd5b5035919050565b600080600080608085870312156119c9578384fd5b84359350602085013567ffffffffffffffff808211156119e7578485fd5b6119f388838901611746565b94506040870135915080821115611a08578384fd5b611a1488838901611746565b93506060870135915080821115611a29578283fd5b5061186087828801611746565b60008151808452611a4e816020860160208601611c1c565b601f01601f19169290920160200192915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000815260008451611a9a816009850160208901611c1c565b7f222c20226465736372697074696f6e223a2200000000000000000000000000006009918401918201528451611ad781601b840160208901611c1c565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201528351611b15816028840160208801611c1c565b61227d60f01b60289290910191820152602a0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b6981601d850160208701611c1c565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ba86080830184611a36565b9695505050505050565b6020815260006117656020830184611a36565b60008219821115611bd857611bd8611c7d565b500190565b600082611bf857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c1757611c17611c7d565b500290565b60005b83811015611c37578181015183820152602001611c1f565b838111156105ec5750506000910152565b600181811c90821680611c5c57607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d7657600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052d59b8ce53c25e1240b28c2c2b3f47838e6d438879c74e418d85822c533aed764736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x8 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x3 DUP1 DUP3 MSTORE PUSH3 0x139195 PUSH1 0xEA SHL PUSH1 0x20 DUP1 DUP5 ADD DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 DUP8 ADD SWAP1 SWAP7 MSTORE SWAP3 DUP6 MSTORE DUP5 ADD MSTORE DUP2 MLOAD SWAP2 SWAP3 SWAP2 PUSH3 0x5D SWAP2 PUSH1 0x2 SWAP2 PUSH3 0xDE JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x73 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0xDE JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x0 SSTORE POP PUSH3 0x86 CALLER PUSH3 0x8C JUMP JUMPDEST PUSH3 0x1C1 JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0xEC SWAP1 PUSH3 0x184 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x110 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x15B JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x12B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x15B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x15B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x15B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x13E JUMP JUMPDEST POP PUSH3 0x169 SWAP3 SWAP2 POP PUSH3 0x16D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x169 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x16E JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x199 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x1BB JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D35 DUP1 PUSH3 0x1D1 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x177 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC87B56DD GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2C2 JUMPI DUP1 PUSH4 0xC401AA99 EQ PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x12F JUMPI DUP1 PUSH4 0x2AEDC3F9 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x2AEDC3F9 EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x62A5AF3B EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 GT PUSH2 0x160 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x54F7D9C EQ PUSH2 0x1A4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18F PUSH2 0x18A CALLDATASIZE PUSH1 0x4 PUSH2 0x18CF JUMP JUMPDEST PUSH2 0x34A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x18F SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x39C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19B SWAP2 SWAP1 PUSH2 0x1BB2 JUMP JUMPDEST PUSH2 0x1E0 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x42E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x206 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A6 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD SUB PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x17B8 JUMP JUMPDEST PUSH2 0x500 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x1907 JUMP JUMPDEST PUSH2 0x50B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x17B8 JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x60D JUMP JUMPDEST PUSH2 0x1E0 PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x697 JUMP JUMPDEST PUSH2 0x219 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x176C JUMP JUMPDEST PUSH2 0x6A9 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x6F8 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E0 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x75E JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x186C JUMP JUMPDEST PUSH2 0x76D JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x17F3 JUMP JUMPDEST PUSH2 0x803 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x19B4 JUMP JUMPDEST PUSH2 0x84E JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x2F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x1786 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x345 CALLDATASIZE PUSH1 0x4 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xC97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x37B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x396 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD PUSH2 0x3AB SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x3D7 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x424 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x424 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x407 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x439 DUP3 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0x456 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33D1C039 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47D DUP3 PUSH2 0x697 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x250FDEE3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x4D2 JUMPI POP PUSH2 0x4D0 DUP2 CALLER PUSH2 0x309 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67D9DCA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH2 0xDB2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x56A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x9 DUP3 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP2 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH2 0x5A8 SWAP3 DUP5 SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD DUP1 MLOAD PUSH2 0x5C1 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x5DD SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP SWAP1 POP POP PUSH2 0x5EC DUP2 PUSH1 0x1 PUSH2 0x1031 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x803 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x667 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A2 DUP3 PUSH2 0x104F JUMP JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23D3AD81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x752 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH2 0x75C PUSH1 0x0 PUSH2 0x1178 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x3AB SWAP1 PUSH2 0x1C48 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x797 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB06307DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x80E DUP5 DUP5 DUP5 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO ISZERO DUP1 ISZERO PUSH2 0x830 JUMPI POP PUSH2 0x82E DUP5 DUP5 DUP5 DUP5 PUSH2 0x11D7 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x5EC JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH2 0x858 DUP2 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0x8BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A2055524920717565727920666F72206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x3732BC34B9BA32B73A103A37B5B2B7 PUSH1 0x89 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x916 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A206D657461646174612069732066726F7A PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x9 DUP3 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP2 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH2 0x9B8 SWAP3 DUP5 SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD DUP1 MLOAD PUSH2 0x9D1 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x9ED SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0xA03 DUP2 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0xA67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A2055524920717565727920666F72206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x3732BC34B9BA32B73A103A37B5B2B7 PUSH1 0x89 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD DUP3 SWAP1 DUP3 SWAP1 PUSH2 0xA8E SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xABA SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB07 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xADC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB07 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAEA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH2 0xB20 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB4C SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB99 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB6E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB99 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB7C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH2 0xBB2 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xBDE SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC2B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC00 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC2B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC0E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP PUSH2 0xC6E DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC5A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x12CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC7E SWAP2 SWAP1 PUSH2 0x1B31 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH2 0xD76 DUP2 PUSH2 0x1178 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 GT ISZERO DUP1 ISZERO PUSH2 0xD8D JUMPI POP PUSH1 0x0 SLOAD DUP3 LT JUMPDEST DUP1 ISZERO PUSH2 0x396 JUMPI POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE26 DUP3 PUSH2 0x104F JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0xE54 JUMPI POP DUP2 MLOAD PUSH2 0xE54 SWAP1 CALLER PUSH2 0x309 JUMP JUMPDEST DUP1 PUSH2 0xE6F JUMPI POP CALLER PUSH2 0xE64 DUP5 PUSH2 0x42E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP1 POP DUP1 PUSH2 0xE8F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CE44B5F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xEC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0xA11481 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A954ECD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xEFB PUSH1 0x0 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xDB2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT DUP1 DUP3 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 NOT ADD DUP4 AND OR SWAP1 SWAP3 SSTORE DUP10 DUP7 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD SWAP4 DUP5 AND SWAP4 DUP4 AND PUSH1 0x1 SWAP1 DUP2 ADD DUP5 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE DUP10 DUP7 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP5 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SWAP3 SSTORE SWAP1 DUP7 ADD DUP1 DUP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 AND PUSH2 0xFE7 JUMPI PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0xFE7 JUMPI DUP3 MLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP2 DUP7 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR OR SWAP1 SSTORE JUMPDEST POP DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x104B DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1442 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP1 PUSH1 0x1 GT ISZERO DUP1 ISZERO PUSH2 0x107F JUMPI POP PUSH1 0x0 SLOAD DUP2 LT JUMPDEST ISZERO PUSH2 0x115F JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x115D JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x10F3 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x0 NOT ADD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP3 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP4 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO PUSH2 0x1158 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x10F3 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6F96CDA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x120C SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B76 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1256 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1253 SWAP2 DUP2 ADD SWAP1 PUSH2 0x18EB JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x12B1 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1289 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x12A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x12EE JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CC0 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x131D SWAP2 SWAP1 PUSH2 0x1BC5 JUMP JUMPDEST PUSH2 0x1327 SWAP2 SWAP1 PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x1332 SWAP1 PUSH1 0x4 PUSH2 0x1BFD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1341 DUP3 PUSH1 0x20 PUSH2 0x1BC5 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1367 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1391 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD DUP6 DUP7 MLOAD DUP2 ADD PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x13FD JUMPI PUSH1 0x3 DUP4 ADD SWAP3 POP DUP3 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP3 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x3 DUP10 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x1417 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1428 JUMPI PUSH2 0x1434 JUMP JUMPDEST PUSH2 0x3D3D PUSH1 0xF0 SHL PUSH1 0x1 NOT DUP4 ADD MSTORE PUSH2 0x1434 JUMP JUMPDEST PUSH1 0x3D PUSH1 0xF8 SHL PUSH1 0x0 NOT DUP4 ADD MSTORE JUMPDEST POP SWAP4 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x1473 JUMPI PUSH1 0x40 MLOAD PUSH3 0x2E0763 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH2 0x1491 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB562E8DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP13 ADD DUP2 AND SWAP2 DUP3 OR PUSH9 0x10000000000000000 PUSH8 0xFFFFFFFFFFFFFFFF NOT SWAP1 SWAP5 AND SWAP1 SWAP3 OR DUP4 SWAP1 DIV DUP2 AND DUP13 ADD DUP2 AND SWAP1 SWAP3 MUL OR SWAP1 SWAP2 SSTORE DUP6 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SSTORE DUP1 DUP1 DUP6 ADD DUP4 DUP1 ISZERO PUSH2 0x1543 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x15CC JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 PUSH2 0x1594 PUSH1 0x0 DUP9 DUP5 DUP1 PUSH1 0x1 ADD SWAP6 POP DUP9 PUSH2 0x11D7 JUMP JUMPDEST PUSH2 0x15B1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP3 EQ ISZERO PUSH2 0x1549 JUMPI DUP3 PUSH1 0x0 SLOAD EQ PUSH2 0x15C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1612 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 DUP4 ADD SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 DUP1 DUP3 EQ ISZERO PUSH2 0x15CD JUMPI JUMPDEST POP PUSH1 0x0 SSTORE PUSH2 0x102A JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1627 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1649 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x168F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1662 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x168F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x168F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x168F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1674 JUMP JUMPDEST POP PUSH2 0x169B SWAP3 SWAP2 POP PUSH2 0x169F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x169B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x16A0 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x16CF JUMPI PUSH2 0x16CF PUSH2 0x1C93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x16F7 JUMPI PUSH2 0x16F7 PUSH2 0x1C93 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x1710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1756 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1765 DUP4 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD PUSH2 0x16B4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x177D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1765 DUP3 PUSH2 0x172A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1798 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x17A1 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH2 0x17AF PUSH1 0x20 DUP5 ADD PUSH2 0x172A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17CC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x17D5 DUP5 PUSH2 0x172A JUMP JUMPDEST SWAP3 POP PUSH2 0x17E3 PUSH1 0x20 DUP6 ADD PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1808 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1811 DUP6 PUSH2 0x172A JUMP JUMPDEST SWAP4 POP PUSH2 0x181F PUSH1 0x20 DUP7 ADD PUSH2 0x172A JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1841 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x1851 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1860 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x16B4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x187E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1887 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x189B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18B8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x18C1 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18E0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1765 DUP2 PUSH2 0x1CA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1765 DUP2 PUSH2 0x1CA9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x191C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1933 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x193F DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1954 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1960 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1975 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x1982 DUP8 DUP3 DUP9 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x1991 PUSH1 0x60 DUP7 ADD PUSH2 0x172A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AD JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x19C9 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x19E7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x19F3 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A08 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x1A14 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A29 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1860 DUP8 DUP3 DUP9 ADD PUSH2 0x1746 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A4E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x7B226E616D65223A220000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP5 MLOAD PUSH2 0x1A9A DUP2 PUSH1 0x9 DUP6 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH32 0x222C20226465736372697074696F6E223A220000000000000000000000000000 PUSH1 0x9 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x1AD7 DUP2 PUSH1 0x1B DUP5 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH32 0x222C2022696D616765223A202200000000000000000000000000000000000000 PUSH1 0x1B SWAP3 SWAP1 SWAP2 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x1B15 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH2 0x227D PUSH1 0xF0 SHL PUSH1 0x28 SWAP3 SWAP1 SWAP2 ADD SWAP2 DUP3 ADD MSTORE PUSH1 0x2A ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x646174613A6170706C69636174696F6E2F6A736F6E3B6261736536342C000000 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1B69 DUP2 PUSH1 0x1D DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1C1C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1D ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1BA8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1A36 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1765 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1BD8 JUMPI PUSH2 0x1BD8 PUSH2 0x1C7D JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1BF8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1C17 JUMPI PUSH2 0x1C17 PUSH2 0x1C7D JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C37 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C1F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5EC JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1C5C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xC91 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0xD76 JUMPI PUSH1 0x0 DUP1 REVERT INVALID COINBASE TIMESTAMP NUMBER DIFFICULTY GASLIMIT CHAINID SELFBALANCE 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392B2FA2646970667358 0x22 SLT KECCAK256 MSTORE 0xD5 SWAP12 DUP13 0xE5 EXTCODECOPY 0x25 0xE1 0x24 SIGNEXTEND 0x28 0xC2 0xC2 0xB3 DELEGATECALL PUSH25 0x38E6D438879C74E418D85822C533AED764736F6C6343000804 STOP CALLER ",
              "sourceMap": "92:72:11:-:0;;;1230:26:12;;;-1:-1:-1;;;;1230:26:12;;;123:38:11;;;;;;;;;-1:-1:-1;3600:154:13;;;;;;;;;;;;-1:-1:-1;;;3600:154:13;;;;;;;;;;;;;;;;;;;;;3666:13;;3600:154;;;3666:13;;:5;;:13;:::i;:::-;-1:-1:-1;3689:17:13;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;1635:1:12;3716:13:13;:31;-1:-1:-1;921:32:0;719:10:6;921:18:0;:32::i;:::-;92:72:11;;2270:187:0;2362:6;;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;;2410:40;;2362:6;;;2378:17;2362:6;;2410:40;;2343:16;;2410:40;2270:187;;:::o;92:72:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;92:72:11;;;-1:-1:-1;92:72:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:14;93:1;89:12;;;;136;;;157:2;;211:4;203:6;199:17;189:27;;157:2;264;256:6;253:14;233:18;230:38;227:2;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:2;;69:325;;;:::o;:::-;92:72:11;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:12339:14",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:14",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "88:557:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "98:28:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "108:18:14",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "102:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "153:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "155:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "155:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "155:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "141:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "149:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "138:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "138:14:14"
                              },
                              "nodeType": "YulIf",
                              "src": "135:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "184:17:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "198:2:14",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "194:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "194:7:14"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "188:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "210:23:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "230:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "224:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "224:9:14"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "214:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "242:73:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "264:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "length",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "288:6:14"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "296:2:14",
                                                    "type": "",
                                                    "value": "31"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "284:3:14"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "284:15:14"
                                              },
                                              {
                                                "name": "_2",
                                                "nodeType": "YulIdentifier",
                                                "src": "301:2:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "280:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "280:24:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "306:2:14",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "276:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "276:33:14"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "311:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "272:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "272:42:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "260:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "260:55:14"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "246:10:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "374:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "376:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "376:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "376:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "333:10:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "345:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "330:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "330:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "353:10:14"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "365:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "350:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "350:22:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "327:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "327:46:14"
                              },
                              "nodeType": "YulIf",
                              "src": "324:2:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "412:2:14",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "416:10:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "405:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "405:22:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "405:22:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "436:15:14",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "445:6:14"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "436:5:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "467:6:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "475:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "460:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "460:22:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "460:22:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "520:16:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "529:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "532:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "522:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "522:12:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "522:12:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "501:3:14"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "506:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "497:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "497:16:14"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "515:3:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "494:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "494:25:14"
                              },
                              "nodeType": "YulIf",
                              "src": "491:2:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "562:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "570:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "558:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "558:17:14"
                                  },
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "577:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "582:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "545:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "545:44:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "545:44:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "613:6:14"
                                          },
                                          {
                                            "name": "length",
                                            "nodeType": "YulIdentifier",
                                            "src": "621:6:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "609:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "609:19:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "630:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "605:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "605:30:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "637:1:14",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "598:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "598:41:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "598:41:14"
                            }
                          ]
                        },
                        "name": "abi_decode_available_length_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "57:3:14",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "62:6:14",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "70:3:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "78:5:14",
                            "type": ""
                          }
                        ],
                        "src": "14:631:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "699:147:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "709:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "731:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "718:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "718:20:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "709:5:14"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "824:16:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "833:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "836:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "826:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "826:12:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "826:12:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "760:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "771:5:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "778:42:14",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "767:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "767:54:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "757:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "757:65:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "750:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "750:73:14"
                              },
                              "nodeType": "YulIf",
                              "src": "747:2:14"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "678:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "689:5:14",
                            "type": ""
                          }
                        ],
                        "src": "650:196:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "904:176:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "953:24:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "962:5:14"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "969:5:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "955:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "955:20:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "955:20:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "932:6:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "940:4:14",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "928:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "928:17:14"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "947:3:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "924:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "924:27:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "917:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "917:35:14"
                              },
                              "nodeType": "YulIf",
                              "src": "914:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "986:88:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1033:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1041:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1029:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1029:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1061:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1048:12:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1048:20:14"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "1070:3:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_available_length_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "995:33:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "995:79:14"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "986:5:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "878:6:14",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "886:3:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "894:5:14",
                            "type": ""
                          }
                        ],
                        "src": "851:229:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1155:126:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1201:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1210:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1218:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1203:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1203:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1203:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1176:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1185:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1172:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1172:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1197:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1168:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1168:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1165:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1236:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1265:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1246:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1246:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1236:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1121:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1132:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1144:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1085:196:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1373:183:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1419:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1428:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1436:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1421:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1421:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1421:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1394:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1403:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1390:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1390:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1415:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1386:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1386:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1383:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1454:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1483:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1464:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1464:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1454:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1502:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1535:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1546:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1531:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1531:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1512:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1512:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1502:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1331:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1342:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1354:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1362:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1286:270:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1665:234:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1711:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1720:6:14"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "1728:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1713:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1713:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1713:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1686:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1695:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1682:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1682:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1707:2:14",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1678:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1678:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1675:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1746:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1775:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1756:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1756:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1746:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1794:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1827:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1838:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1823:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1823:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1804:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1804:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1794:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1851:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1878:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1889:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1874:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1874:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1861:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1861:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1851:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1615:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1626:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1638:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1646:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1654:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1561:338:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2034:566:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2081:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2090:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2098:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2083:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2083:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2083:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2055:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2064:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2051:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2051:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2076:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2047:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2047:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2044:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2116:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2145:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2126:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2126:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2116:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2164:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2197:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2208:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2193:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2193:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2174:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2174:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2164:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2221:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2248:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2259:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2244:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2244:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2231:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2231:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "2221:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2272:46:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2303:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2314:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2299:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2299:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2286:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2286:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "2276:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2361:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2370:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2378:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2363:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2363:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2363:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2333:6:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2341:18:14",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2330:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2330:30:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2327:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2396:32:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2410:9:14"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "2421:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2406:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2406:22:14"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "2400:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2476:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2485:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2493:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2478:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2478:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2478:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "2455:2:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2459:4:14",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2451:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2451:13:14"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2466:7:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2447:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2447:27:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2440:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2440:35:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2437:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2511:83:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2559:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2563:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2555:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2555:11:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "2581:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "2568:12:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2568:16:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2586:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_available_length_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "2521:33:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2521:73:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2511:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1976:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1987:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1999:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2007:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "2015:6:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "2023:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1904:696:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2689:283:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2735:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2744:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2752:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2737:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2737:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2737:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2710:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2719:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2706:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2706:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2731:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2702:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2702:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2699:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2770:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2799:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2780:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2780:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2770:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2818:45:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2848:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2859:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2844:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2844:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2831:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2831:32:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2822:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2916:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2925:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2933:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2918:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2918:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2918:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2885:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "2906:5:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "2899:6:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2899:13:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2892:6:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2892:21:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2882:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2882:32:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2875:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2875:40:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2872:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2951:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2961:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2951:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2647:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2658:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2670:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2678:6:14",
                            "type": ""
                          }
                        ],
                        "src": "2605:367:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3064:177:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3110:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3119:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3127:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3112:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3112:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3112:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3085:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3094:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3081:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3081:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3106:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3077:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3077:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3074:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3145:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3174:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "3155:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3155:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3145:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3193:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3220:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3231:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3216:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3216:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3203:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3203:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "3193:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3022:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3033:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3045:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3053:6:14",
                            "type": ""
                          }
                        ],
                        "src": "2977:264:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3315:186:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3361:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3370:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3378:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3363:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3363:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3363:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3336:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3345:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3332:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3332:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3357:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3328:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3328:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3325:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3396:36:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3422:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3409:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3409:23:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3400:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3465:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3441:23:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3441:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3441:30:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3480:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3490:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3480:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3281:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3292:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3304:6:14",
                            "type": ""
                          }
                        ],
                        "src": "3246:255:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3586:179:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3632:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3641:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3649:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3634:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3634:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3634:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3607:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3616:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3603:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3603:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3628:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3599:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3599:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3596:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3667:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3686:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3680:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3680:16:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3671:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3729:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3705:23:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3705:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3705:30:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3744:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3754:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3744:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3552:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3563:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3575:6:14",
                            "type": ""
                          }
                        ],
                        "src": "3506:259:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3921:707:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3968:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3977:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3985:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3970:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3970:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3970:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3942:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3951:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3938:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3938:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3963:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3934:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3934:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3931:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4003:37:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4030:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4017:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4017:23:14"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "4007:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4049:28:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4059:18:14",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4053:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4104:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4113:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4121:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4106:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4106:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4106:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "4092:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4100:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4089:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4089:14:14"
                              },
                              "nodeType": "YulIf",
                              "src": "4086:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4139:60:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4171:9:14"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4182:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4167:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4167:22:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4191:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "4149:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4149:50:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4139:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4208:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4241:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4252:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4237:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4237:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4224:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4224:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4212:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4285:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4294:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "4302:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4287:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4287:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4287:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4271:8:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4281:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4268:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4268:16:14"
                              },
                              "nodeType": "YulIf",
                              "src": "4265:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4320:62:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4352:9:14"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4363:8:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4348:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4348:24:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4374:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "4330:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4330:52:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "4320:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4391:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4424:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4435:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4420:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4420:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4407:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4407:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset_2",
                                  "nodeType": "YulTypedName",
                                  "src": "4395:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4468:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4477:6:14"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "4485:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4470:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4470:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4470:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4454:8:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4464:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4451:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4451:16:14"
                              },
                              "nodeType": "YulIf",
                              "src": "4448:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4503:62:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4535:9:14"
                                      },
                                      {
                                        "name": "offset_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "4546:8:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4531:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4531:24:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "4557:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "4513:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4513:52:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "4503:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4574:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4607:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4618:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4603:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4603:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "4584:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4584:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "4574:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3863:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3874:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3886:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "3894:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "3902:6:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "3910:6:14",
                            "type": ""
                          }
                        ],
                        "src": "3770:858:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4703:120:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4749:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4758:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "4766:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "4751:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4751:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4751:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "4724:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4733:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4720:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4720:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4745:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4716:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4716:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "4713:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4784:33:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4807:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4794:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4794:23:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "4784:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4669:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4680:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4692:6:14",
                            "type": ""
                          }
                        ],
                        "src": "4633:190:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4979:701:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5026:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5035:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "5043:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5028:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5028:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5028:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "5000:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5009:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "4996:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4996:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5021:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "4992:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4992:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "4989:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5061:33:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5084:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5071:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5071:23:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "5061:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5103:46:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5134:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5145:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5130:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5130:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5117:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5117:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "5107:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5158:28:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5168:18:14",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5162:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5213:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5222:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "5230:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5215:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5215:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5215:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "5201:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5209:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5198:14:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5195:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5248:60:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5280:9:14"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "5291:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5276:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5276:22:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5300:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "5258:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5258:50:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "5248:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5317:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5350:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5361:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5346:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5346:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5333:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5333:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "5321:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5394:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5403:6:14"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "5411:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5396:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5396:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5396:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5380:8:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5390:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5377:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5377:16:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5374:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5429:62:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5461:9:14"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "5472:8:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5457:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5457:24:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5483:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "5439:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5439:52:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "5429:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5500:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5533:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5544:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5529:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5529:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5516:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5516:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset_2",
                                  "nodeType": "YulTypedName",
                                  "src": "5504:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5577:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "5586:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "5594:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "5579:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5579:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5579:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "5563:8:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "5573:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5560:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5560:16:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5557:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5612:62:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5644:9:14"
                                      },
                                      {
                                        "name": "offset_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "5655:8:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5640:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5640:24:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "5666:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string",
                                  "nodeType": "YulIdentifier",
                                  "src": "5622:17:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5622:52:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "5612:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256t_string_memory_ptrt_string_memory_ptrt_string_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4921:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "4932:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4944:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4952:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4960:6:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4968:6:14",
                            "type": ""
                          }
                        ],
                        "src": "4828:852:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5734:208:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "5744:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "5764:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "5758:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5758:12:14"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "5748:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "5786:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5791:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5779:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5779:19:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5779:19:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "5833:5:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5840:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5829:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5829:16:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5851:3:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5856:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5847:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5847:14:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5863:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "5807:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5807:63:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5807:63:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5879:57:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "5894:3:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "5907:6:14"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5915:2:14",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "5903:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5903:15:14"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5924:2:14",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "5920:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5920:7:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5899:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5899:29:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5890:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5890:39:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5931:4:14",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5886:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5886:50:14"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "5879:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "5711:5:14",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "5718:3:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "5726:3:14",
                            "type": ""
                          }
                        ],
                        "src": "5685:257:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6586:790:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6603:3:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6608:66:14",
                                    "type": "",
                                    "value": "0x7b226e616d65223a220000000000000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6596:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6596:79:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6596:79:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6684:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "6704:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6698:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6698:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "6688:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "6746:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6754:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6742:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6742:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "6765:3:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6770:1:14",
                                        "type": "",
                                        "value": "9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6761:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6761:11:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6774:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6720:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6720:61:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6720:61:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6790:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "6804:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6809:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6800:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6800:16:14"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6794:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6836:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6840:1:14",
                                        "type": "",
                                        "value": "9"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6832:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6832:10:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6844:66:14",
                                    "type": "",
                                    "value": "0x222c20226465736372697074696f6e223a220000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6825:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6825:86:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6825:86:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6920:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "6942:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "6936:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6936:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "6924:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "6984:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6992:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6980:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6980:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "7003:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7007:2:14",
                                        "type": "",
                                        "value": "27"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "6999:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6999:11:14"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7012:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "6958:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6958:63:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6958:63:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7030:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7044:2:14"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "7048:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7040:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7040:17:14"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "7034:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "7077:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7081:2:14",
                                        "type": "",
                                        "value": "27"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7073:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7073:11:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7086:66:14",
                                    "type": "",
                                    "value": "0x222c2022696d616765223a202200000000000000000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7066:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7066:87:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7066:87:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7162:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7184:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7178:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7178:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length_2",
                                  "nodeType": "YulTypedName",
                                  "src": "7166:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value2",
                                        "nodeType": "YulIdentifier",
                                        "src": "7226:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7234:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7222:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7222:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "7245:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7249:2:14",
                                        "type": "",
                                        "value": "40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7241:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7241:11:14"
                                  },
                                  {
                                    "name": "length_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7254:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7200:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7200:63:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7200:63:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7272:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7286:2:14"
                                  },
                                  {
                                    "name": "length_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "7290:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7282:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7282:17:14"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "7276:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "7319:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7323:2:14",
                                        "type": "",
                                        "value": "40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7315:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7315:11:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7332:3:14",
                                        "type": "",
                                        "value": "240"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7337:4:14",
                                        "type": "",
                                        "value": "8829"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7328:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7328:14:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7308:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7308:35:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7308:35:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7352:18:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "7363:2:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7367:2:14",
                                    "type": "",
                                    "value": "42"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7359:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7359:11:14"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "7352:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_14271abadab347880c45d45d3abf3dce36bb4aa23c658e4207d08ac9b3f38832_t_string_memory_ptr_t_stringliteral_9780691b4087a1893a28b24020f5f6d0c7583060bd6cfeb54b8284a5bf55f11f_t_string_memory_ptr_t_stringliteral_8d0de490dde571af103e878aa265925a94dd83b4f74e62b617db5ad43a4f76af_t_string_memory_ptr_t_stringliteral_835b459273672627bbafc3a2eded65187a632f4128bdc79e126c7ef579a27475__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "6546:3:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "6551:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "6559:6:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "6567:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "6578:3:14",
                            "type": ""
                          }
                        ],
                        "src": "5947:1429:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7621:208:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "7638:3:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "7643:31:14",
                                    "type": "",
                                    "value": "data:application/json;base64,"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7631:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7631:44:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7631:44:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "7684:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "7704:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7698:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7698:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "7688:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "7746:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7754:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7742:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7742:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7765:3:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7770:2:14",
                                        "type": "",
                                        "value": "29"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7761:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7761:12:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "7775:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "7720:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7720:62:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7720:62:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7791:32:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "7806:3:14"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "7811:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "7802:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7802:16:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7820:2:14",
                                    "type": "",
                                    "value": "29"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7798:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7798:25:14"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "7791:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "7597:3:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7602:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "7613:3:14",
                            "type": ""
                          }
                        ],
                        "src": "7381:448:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7935:125:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7945:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7957:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7968:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "7953:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7953:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "7945:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "7987:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8002:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8010:42:14",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "7998:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7998:55:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7980:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7980:74:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7980:74:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "7904:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "7915:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "7926:4:14",
                            "type": ""
                          }
                        ],
                        "src": "7834:226:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8268:308:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "8278:52:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8288:42:14",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "8282:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8346:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "8361:6:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8369:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8357:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8357:15:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8339:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8339:34:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8339:34:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8393:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8404:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8389:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8389:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8413:6:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8421:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "8409:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8409:15:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8382:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8382:43:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8382:43:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8445:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8456:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8441:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8441:18:14"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "8461:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8434:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8434:34:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8434:34:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8488:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8499:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8484:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8484:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8504:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8477:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8477:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8477:31:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8517:53:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "8542:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8554:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8565:3:14",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8550:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8550:19:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8525:16:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8525:45:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8517:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8213:9:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "8224:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "8232:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "8240:6:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8248:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8259:4:14",
                            "type": ""
                          }
                        ],
                        "src": "8065:511:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8676:92:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "8686:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8698:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8709:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "8694:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8694:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8686:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8728:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "8753:6:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "8746:6:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "8746:14:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "8739:6:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8739:22:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8721:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8721:41:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8721:41:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8645:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8656:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8667:4:14",
                            "type": ""
                          }
                        ],
                        "src": "8581:187:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "8894:98:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "8911:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8922:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "8904:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8904:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "8904:21:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "8934:52:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "8959:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "8971:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8982:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8967:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8967:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "8942:16:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8942:44:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "8934:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "8863:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "8874:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "8885:4:14",
                            "type": ""
                          }
                        ],
                        "src": "8773:219:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9171:228:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9188:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9199:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9181:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9181:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9181:21:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9222:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9233:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9218:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9218:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9238:2:14",
                                    "type": "",
                                    "value": "38"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9211:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9211:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9211:30:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9261:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9272:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9257:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9257:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9277:34:14",
                                    "type": "",
                                    "value": "Ownable: new owner is the zero a"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9250:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9250:62:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9250:62:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9332:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9343:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9328:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9328:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9348:8:14",
                                    "type": "",
                                    "value": "ddress"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9321:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9321:36:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9321:36:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9366:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9378:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9389:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9374:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9374:19:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9366:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9148:9:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9162:4:14",
                            "type": ""
                          }
                        ],
                        "src": "8997:402:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9578:224:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9595:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9606:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9588:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9588:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9588:21:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9629:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9640:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9625:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9625:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9645:2:14",
                                    "type": "",
                                    "value": "34"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9618:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9618:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9618:30:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9668:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9679:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9664:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9664:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9684:34:14",
                                    "type": "",
                                    "value": "ERC721Metadata: metadata is froz"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9657:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9657:62:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9657:62:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "9739:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "9750:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "9735:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "9735:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "9755:4:14",
                                    "type": "",
                                    "value": "en"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9728:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9728:32:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9728:32:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "9769:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9781:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9792:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "9777:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9777:19:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "9769:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_2c716192779ab80316194a665e9324a61481b2c5b5229768f1862bcf387fc540__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9555:9:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9569:4:14",
                            "type": ""
                          }
                        ],
                        "src": "9404:398:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "9981:182:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "9998:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10009:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "9991:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9991:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "9991:21:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10032:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10043:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10028:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10028:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10048:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10021:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10021:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10021:30:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10071:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10082:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10067:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10067:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10087:34:14",
                                    "type": "",
                                    "value": "Ownable: caller is not the owner"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10060:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10060:62:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10060:62:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10131:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10143:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10154:2:14",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10139:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10139:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10131:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "9958:9:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "9972:4:14",
                            "type": ""
                          }
                        ],
                        "src": "9807:356:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10342:237:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10359:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10370:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10352:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10352:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10352:21:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10393:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10404:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10389:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10389:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10409:2:14",
                                    "type": "",
                                    "value": "47"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10382:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10382:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10382:30:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10432:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10443:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10428:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10428:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10448:34:14",
                                    "type": "",
                                    "value": "ERC721Metadata: URI query for no"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10421:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10421:62:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10421:62:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "10503:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "10514:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "10499:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10499:18:14"
                                  },
                                  {
                                    "kind": "string",
                                    "nodeType": "YulLiteral",
                                    "src": "10519:17:14",
                                    "type": "",
                                    "value": "nexistent token"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10492:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10492:45:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10492:45:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10546:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10558:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10569:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10554:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10554:19:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10546:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10319:9:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10333:4:14",
                            "type": ""
                          }
                        ],
                        "src": "10168:411:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10685:76:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "10695:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10707:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10718:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10703:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10703:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "10695:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "10737:9:14"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "10748:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "10730:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10730:25:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "10730:25:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "10654:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "10665:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "10676:4:14",
                            "type": ""
                          }
                        ],
                        "src": "10584:177:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10814:80:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10841:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "10843:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10843:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10843:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10830:1:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "10837:1:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "10833:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "10833:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "10827:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10827:13:14"
                              },
                              "nodeType": "YulIf",
                              "src": "10824:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "10872:16:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "10883:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10886:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "10879:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10879:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "10872:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10797:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10800:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "10806:3:14",
                            "type": ""
                          }
                        ],
                        "src": "10766:128:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "10945:171:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "10976:111:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "r",
                                          "nodeType": "YulIdentifier",
                                          "src": "10997:1:14"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "11004:3:14",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "11009:10:14",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "11000:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11000:20:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "10990:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "10990:31:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "10990:31:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11041:1:14",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11044:4:14",
                                          "type": "",
                                          "value": "0x12"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11034:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11034:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11034:15:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "r",
                                          "nodeType": "YulIdentifier",
                                          "src": "11069:1:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11072:4:14",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11062:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11062:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11062:15:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "10965:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10958:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10958:9:14"
                              },
                              "nodeType": "YulIf",
                              "src": "10955:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11096:14:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11105:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11108:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "11101:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11101:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "11096:1:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "10930:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "10933:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "10939:1:14",
                            "type": ""
                          }
                        ],
                        "src": "10899:217:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11173:116:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11232:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "11234:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11234:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11234:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "11204:1:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "11197:6:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11197:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "11190:6:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11190:17:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "11212:1:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "11223:1:14",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "11219:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "11219:6:14"
                                          },
                                          {
                                            "name": "x",
                                            "nodeType": "YulIdentifier",
                                            "src": "11227:1:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nodeType": "YulIdentifier",
                                          "src": "11215:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "11215:14:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11209:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11209:21:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11186:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11186:45:14"
                              },
                              "nodeType": "YulIf",
                              "src": "11183:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "11263:20:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "11278:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "11281:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "11274:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11274:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "product",
                                  "nodeType": "YulIdentifier",
                                  "src": "11263:7:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_mul_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "11152:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "11155:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "product",
                            "nodeType": "YulTypedName",
                            "src": "11161:7:14",
                            "type": ""
                          }
                        ],
                        "src": "11121:168:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11347:205:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11357:10:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "11366:1:14",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "11361:1:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11426:63:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11451:3:14"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "11456:1:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11447:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11447:11:14"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11470:3:14"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "11475:1:14"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "11466:3:14"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "11466:11:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "11460:5:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11460:18:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11440:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11440:39:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11440:39:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11387:1:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11390:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11384:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11384:13:14"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "11398:19:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11400:15:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "11409:1:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11412:2:14",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "11405:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11405:10:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "11400:1:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "11380:3:14",
                                "statements": []
                              },
                              "src": "11376:113:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11515:31:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "11528:3:14"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "11533:6:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "11524:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11524:16:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11542:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11517:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11517:27:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11517:27:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "11504:1:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "11507:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "11501:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11501:13:14"
                              },
                              "nodeType": "YulIf",
                              "src": "11498:2:14"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "11325:3:14",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "11330:3:14",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "11335:6:14",
                            "type": ""
                          }
                        ],
                        "src": "11294:258:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11612:325:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "11622:22:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11636:1:14",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "11639:4:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "11632:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11632:12:14"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "11622:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "11653:38:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "11683:4:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11689:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "11679:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11679:12:14"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "11657:18:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11730:31:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "11732:27:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "11746:6:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11754:4:14",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "11742:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11742:17:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "11732:6:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "11710:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "11703:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11703:26:14"
                              },
                              "nodeType": "YulIf",
                              "src": "11700:2:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "11820:111:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11841:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "11848:3:14",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "11853:10:14",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "11844:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "11844:20:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11834:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11834:31:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11834:31:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11885:1:14",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11888:4:14",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "11878:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11878:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11878:15:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11913:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "11916:4:14",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "11906:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "11906:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "11906:15:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "11776:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "11799:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11807:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "11796:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11796:14:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "11773:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11773:38:14"
                              },
                              "nodeType": "YulIf",
                              "src": "11770:2:14"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "11592:4:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "11601:6:14",
                            "type": ""
                          }
                        ],
                        "src": "11557:380:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "11974:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "11991:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "11998:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12003:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "11994:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "11994:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "11984:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "11984:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "11984:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12031:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12034:4:14",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12024:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12024:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12024:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12055:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12058:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12048:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12048:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12048:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "11942:127:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12106:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12123:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12130:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "12135:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "12126:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12126:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12116:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12116:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12116:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12163:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12166:4:14",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "12156:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12156:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12156:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12187:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "12190:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "12180:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12180:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "12180:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "12074:127:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "12250:87:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "12315:16:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12324:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "12327:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "12317:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "12317:12:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "12317:12:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "12273:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "12284:5:14"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12295:3:14",
                                                "type": "",
                                                "value": "224"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "12300:10:14",
                                                "type": "",
                                                "value": "0xffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "12291:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "12291:20:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "12280:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "12280:32:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "12270:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "12270:43:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "12263:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "12263:51:14"
                              },
                              "nodeType": "YulIf",
                              "src": "12260:2:14"
                            }
                          ]
                        },
                        "name": "validator_revert_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "12239:5:14",
                            "type": ""
                          }
                        ],
                        "src": "12206:131:14"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_available_length_bytes(src, length, end) -> array\n    {\n        let _1 := 0xffffffffffffffff\n        if gt(length, _1) { panic_error_0x41() }\n        let _2 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        array := memPtr\n        mstore(memPtr, length)\n        if gt(add(src, length), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), src, length)\n        mstore(add(add(memPtr, length), 0x20), 0)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        array := abi_decode_available_length_bytes(add(offset, 0x20), calldataload(offset), end)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value3, value3) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(value3, value3) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value3, value3) }\n        value3 := abi_decode_available_length_bytes(add(_1, 32), calldataload(_1), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(value1, value1) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_string_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value0, value0) }\n        value0 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value1, value1) }\n        value1 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(value2, value2) }\n        value2 := abi_decode_string(add(headStart, offset_2), dataEnd)\n        value3 := abi_decode_address(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_string_memory_ptrt_string_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value1, value1) }\n        value1 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(value2, value2) }\n        value2 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 96))\n        if gt(offset_2, _1) { revert(value3, value3) }\n        value3 := abi_decode_string(add(headStart, offset_2), dataEnd)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_14271abadab347880c45d45d3abf3dce36bb4aa23c658e4207d08ac9b3f38832_t_string_memory_ptr_t_stringliteral_9780691b4087a1893a28b24020f5f6d0c7583060bd6cfeb54b8284a5bf55f11f_t_string_memory_ptr_t_stringliteral_8d0de490dde571af103e878aa265925a94dd83b4f74e62b617db5ad43a4f76af_t_string_memory_ptr_t_stringliteral_835b459273672627bbafc3a2eded65187a632f4128bdc79e126c7ef579a27475__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, 0x7b226e616d65223a220000000000000000000000000000000000000000000000)\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 9), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 9), 0x222c20226465736372697074696f6e223a220000000000000000000000000000)\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 27), length_1)\n        let _2 := add(_1, length_1)\n        mstore(add(_2, 27), 0x222c2022696d616765223a202200000000000000000000000000000000000000)\n        let length_2 := mload(value2)\n        copy_memory_to_memory(add(value2, 0x20), add(_2, 40), length_2)\n        let _3 := add(_2, length_2)\n        mstore(add(_3, 40), shl(240, 8829))\n        end := add(_3, 42)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, \"data:application/json;base64,\")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 29), length)\n        end := add(add(pos, length), 29)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_2c716192779ab80316194a665e9324a61481b2c5b5229768f1862bcf387fc540__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC721Metadata: metadata is froz\")\n        mstore(add(headStart, 96), \"en\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"ERC721Metadata: URI query for no\")\n        mstore(add(headStart, 96), \"nexistent token\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(r, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(r, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_bytes4(value)\n    {\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n}",
                  "id": 14,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106101775760003560e01c80636352211e116100d8578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd146102e8578063e985e9c5146102fb578063f2fde38b1461033757600080fd5b8063a22cb465146102af578063b88d4fde146102c2578063c401aa99146102d557600080fd5b8063715018a6116100bd578063715018a61461028e5780638da5cb5b1461029657806395d89b41146102a757600080fd5b80636352211e1461026857806370a082311461027b57600080fd5b806318160ddd1161012f5780632aedc3f9116101145780632aedc3f91461023a57806342842e0e1461024d57806362a5af3b1461026057600080fd5b806318160ddd1461020d57806323b872dd1461022757600080fd5b806306fdde031161016057806306fdde03146101b8578063081812fc146101cd578063095ea7b3146101f857600080fd5b806301ffc9a71461017c578063054f7d9c146101a4575b600080fd5b61018f61018a3660046118cf565b61034a565b60405190151581526020015b60405180910390f35b60085461018f90600160a01b900460ff1681565b6101c061039c565b60405161019b9190611bb2565b6101e06101db36600461199c565b61042e565b6040516001600160a01b03909116815260200161019b565b61020b6102063660046118a6565b610472565b005b60015460005403600019015b60405190815260200161019b565b61020b6102353660046117b8565b610500565b61020b610248366004611907565b61050b565b61020b61025b3660046117b8565b6105f2565b61020b61060d565b6101e061027636600461199c565b610697565b61021961028936600461176c565b6106a9565b61020b6106f8565b6008546001600160a01b03166101e0565b6101c061075e565b61020b6102bd36600461186c565b61076d565b61020b6102d03660046117f3565b610803565b61020b6102e33660046119b4565b61084e565b6101c06102f636600461199c565b6109f7565b61018f610309366004611786565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020b61034536600461176c565b610c97565b60006001600160e01b031982166380ac58cd60e01b148061037b57506001600160e01b03198216635b5e139f60e01b145b8061039657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546103ab90611c48565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611c48565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050905090565b600061043982610d79565b610456576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061047d82610697565b9050806001600160a01b0316836001600160a01b031614156104b25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906104d257506104d08133610309565b155b156104f0576040516367d9dca160e11b815260040160405180910390fd5b6104fb838383610db2565b505050565b6104fb838383610e1b565b6008546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604080516060810182528581526020808201869052818301859052600080548152600982529290922081518051929391926105a8928492019061161b565b5060208281015180516105c1926001850192019061161b565b50604082015180516105dd91600284019160209091019061161b565b509050506105ec816001611031565b50505050565b6104fb83838360405180602001604052806000815250610803565b6008546001600160a01b031633146106675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b60006106a28261104f565b5192915050565b60006001600160a01b0382166106d2576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b61075c6000611178565b565b6060600380546103ab90611c48565b6001600160a01b0382163314156107975760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61080e848484610e1b565b6001600160a01b0383163b15158015610830575061082e848484846111d7565b155b156105ec576040516368d2bf6b60e11b815260040160405180910390fd5b8361085881610d79565b6108bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b6008546001600160a01b031633146109165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600854600160a01b900460ff161561097b5760405162461bcd60e51b815260206004820152602260248201527f4552433732314d657461646174613a206d657461646174612069732066726f7a60448201526132b760f11b6064820152608401610561565b6040805160608101825285815260208082018690528183018590526000888152600982529290922081518051929391926109b8928492019061161b565b5060208281015180516109d1926001850192019061161b565b50604082015180516109ed91600284019160209091019061161b565b5050505050505050565b606081610a0381610d79565b610a675760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b600083815260096020526040808220815160608101909252805482908290610a8e90611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90611c48565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b50505050508152602001600182018054610b2090611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4c90611c48565b8015610b995780601f10610b6e57610100808354040283529160200191610b99565b820191906000526020600020905b815481529060010190602001808311610b7c57829003601f168201915b50505050508152602001600282018054610bb290611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90611c48565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050815250509050610c6e816000015182602001518360400151604051602001610c5a93929190611a62565b6040516020818303038152906040526112ce565b604051602001610c7e9190611b31565b6040516020818303038152906040529250505b50919050565b6008546001600160a01b03163314610cf15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610561565b610d7681611178565b50565b600081600111158015610d8d575060005482105b8015610396575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610e268261104f565b80519091506000906001600160a01b0316336001600160a01b03161480610e5457508151610e549033610309565b80610e6f575033610e648461042e565b6001600160a01b0316145b905080610e8f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614610ec45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416610eeb57604051633a954ecd60e21b815260040160405180910390fd5b610efb6000848460000151610db2565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116610fe757600054811015610fe7578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61104b828260405180602001604052806000815250611442565b5050565b6040805160608101825260008082526020820181905291810191909152818060011115801561107f575060005481105b1561115f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061115d5780516001600160a01b0316156110f3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611158579392505050565b6110f3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061120c903390899088908890600401611b76565b602060405180830381600087803b15801561122657600080fd5b505af1925050508015611256575060408051601f3d908101601f19168201909252611253918101906118eb565b60015b6112b1573d808015611284576040519150601f19603f3d011682016040523d82523d6000602084013e611289565b606091505b5080516112a9576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600014156112ee57505060408051602081019091526000815290565b6000604051806060016040528060408152602001611cc0604091399050600060038451600261131d9190611bc5565b6113279190611bdd565b611332906004611bfd565b90506000611341826020611bc5565b67ffffffffffffffff81111561136757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611391576020820181803683370190505b509050818152600183018586518101602084015b818310156113fd576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113a5565b600389510660018114611417576002811461142857611434565b613d3d60f01b600119830152611434565b603d60f81b6000198301525b509398975050505050505050565b6104fb83838360016000546001600160a01b03851661147357604051622e076360e81b815260040160405180910390fd5b836114915760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154357506001600160a01b0387163b15155b156115cc575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159460008884806001019550886111d7565b6115b1576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115495782600054146115c757600080fd5b611612565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115cd575b5060005561102a565b82805461162790611c48565b90600052602060002090601f016020900481019282611649576000855561168f565b82601f1061166257805160ff191683800117855561168f565b8280016001018555821561168f579182015b8281111561168f578251825591602001919060010190611674565b5061169b92915061169f565b5090565b5b8082111561169b57600081556001016116a0565b600067ffffffffffffffff808411156116cf576116cf611c93565b604051601f8501601f19908116603f011681019082821181831017156116f7576116f7611c93565b8160405280935085815286868601111561171057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461174157600080fd5b919050565b600082601f830112611756578081fd5b611765838335602085016116b4565b9392505050565b60006020828403121561177d578081fd5b6117658261172a565b60008060408385031215611798578081fd5b6117a18361172a565b91506117af6020840161172a565b90509250929050565b6000806000606084860312156117cc578081fd5b6117d58461172a565b92506117e36020850161172a565b9150604084013590509250925092565b60008060008060808587031215611808578081fd5b6118118561172a565b935061181f6020860161172a565b925060408501359150606085013567ffffffffffffffff811115611841578182fd5b8501601f81018713611851578182fd5b611860878235602084016116b4565b91505092959194509250565b6000806040838503121561187e578182fd5b6118878361172a565b91506020830135801515811461189b578182fd5b809150509250929050565b600080604083850312156118b8578182fd5b6118c18361172a565b946020939093013593505050565b6000602082840312156118e0578081fd5b813561176581611ca9565b6000602082840312156118fc578081fd5b815161176581611ca9565b6000806000806080858703121561191c578384fd5b843567ffffffffffffffff80821115611933578586fd5b61193f88838901611746565b95506020870135915080821115611954578485fd5b61196088838901611746565b94506040870135915080821115611975578384fd5b5061198287828801611746565b9250506119916060860161172a565b905092959194509250565b6000602082840312156119ad578081fd5b5035919050565b600080600080608085870312156119c9578384fd5b84359350602085013567ffffffffffffffff808211156119e7578485fd5b6119f388838901611746565b94506040870135915080821115611a08578384fd5b611a1488838901611746565b93506060870135915080821115611a29578283fd5b5061186087828801611746565b60008151808452611a4e816020860160208601611c1c565b601f01601f19169290920160200192915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000815260008451611a9a816009850160208901611c1c565b7f222c20226465736372697074696f6e223a2200000000000000000000000000006009918401918201528451611ad781601b840160208901611c1c565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201528351611b15816028840160208801611c1c565b61227d60f01b60289290910191820152602a0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b6981601d850160208701611c1c565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ba86080830184611a36565b9695505050505050565b6020815260006117656020830184611a36565b60008219821115611bd857611bd8611c7d565b500190565b600082611bf857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c1757611c17611c7d565b500290565b60005b83811015611c37578181015183820152602001611c1f565b838111156105ec5750506000910152565b600181811c90821680611c5c57607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d7657600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052d59b8ce53c25e1240b28c2c2b3f47838e6d438879c74e418d85822c533aed764736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x177 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xC87B56DD GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x2E8 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x2FB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x2C2 JUMPI DUP1 PUSH4 0xC401AA99 EQ PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x296 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x12F JUMPI DUP1 PUSH4 0x2AEDC3F9 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x2AEDC3F9 EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x62A5AF3B EQ PUSH2 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 GT PUSH2 0x160 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x54F7D9C EQ PUSH2 0x1A4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18F PUSH2 0x18A CALLDATASIZE PUSH1 0x4 PUSH2 0x18CF JUMP JUMPDEST PUSH2 0x34A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x18F SWAP1 PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x39C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19B SWAP2 SWAP1 PUSH2 0x1BB2 JUMP JUMPDEST PUSH2 0x1E0 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x42E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x206 CALLDATASIZE PUSH1 0x4 PUSH2 0x18A6 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD SUB PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x235 CALLDATASIZE PUSH1 0x4 PUSH2 0x17B8 JUMP JUMPDEST PUSH2 0x500 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0x1907 JUMP JUMPDEST PUSH2 0x50B JUMP JUMPDEST PUSH2 0x20B PUSH2 0x25B CALLDATASIZE PUSH1 0x4 PUSH2 0x17B8 JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x60D JUMP JUMPDEST PUSH2 0x1E0 PUSH2 0x276 CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x697 JUMP JUMPDEST PUSH2 0x219 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x176C JUMP JUMPDEST PUSH2 0x6A9 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x6F8 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E0 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x75E JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x186C JUMP JUMPDEST PUSH2 0x76D JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x17F3 JUMP JUMPDEST PUSH2 0x803 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x2E3 CALLDATASIZE PUSH1 0x4 PUSH2 0x19B4 JUMP JUMPDEST PUSH2 0x84E JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x2F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x18F PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x1786 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x20B PUSH2 0x345 CALLDATASIZE PUSH1 0x4 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xC97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x37B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x396 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD PUSH2 0x3AB SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x3D7 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x424 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3F9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x424 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x407 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x439 DUP3 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0x456 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33D1C039 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47D DUP3 PUSH2 0x697 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4B2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x250FDEE3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x4D2 JUMPI POP PUSH2 0x4D0 DUP2 CALLER PUSH2 0x309 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67D9DCA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH2 0xDB2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x56A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD DUP2 MSTORE PUSH1 0x9 DUP3 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP2 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH2 0x5A8 SWAP3 DUP5 SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD DUP1 MLOAD PUSH2 0x5C1 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x5DD SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP SWAP1 POP POP PUSH2 0x5EC DUP2 PUSH1 0x1 PUSH2 0x1031 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x803 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x667 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6A2 DUP3 PUSH2 0x104F JUMP JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6D2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23D3AD81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x752 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH2 0x75C PUSH1 0x0 PUSH2 0x1178 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x3AB SWAP1 PUSH2 0x1C48 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x797 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB06307DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x80E DUP5 DUP5 DUP5 PUSH2 0xE1B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO ISZERO DUP1 ISZERO PUSH2 0x830 JUMPI POP PUSH2 0x82E DUP5 DUP5 DUP5 DUP5 PUSH2 0x11D7 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x5EC JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH2 0x858 DUP2 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0x8BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A2055524920717565727920666F72206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x3732BC34B9BA32B73A103A37B5B2B7 PUSH1 0x89 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x916 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A206D657461646174612069732066726F7A PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B7 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP2 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x9 DUP3 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP2 MLOAD DUP1 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH2 0x9B8 SWAP3 DUP5 SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x20 DUP3 DUP2 ADD MLOAD DUP1 MLOAD PUSH2 0x9D1 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x9ED SWAP2 PUSH1 0x2 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x161B JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0xA03 DUP2 PUSH2 0xD79 JUMP JUMPDEST PUSH2 0xA67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4552433732314D657461646174613A2055524920717565727920666F72206E6F PUSH1 0x44 DUP3 ADD MSTORE PUSH15 0x3732BC34B9BA32B73A103A37B5B2B7 PUSH1 0x89 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP3 MSTORE DUP1 SLOAD DUP3 SWAP1 DUP3 SWAP1 PUSH2 0xA8E SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xABA SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB07 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xADC JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB07 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAEA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH2 0xB20 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB4C SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB99 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB6E JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB99 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB7C JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH2 0xBB2 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xBDE SWAP1 PUSH2 0x1C48 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xC2B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC00 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC2B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC0E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP PUSH2 0xC6E DUP2 PUSH1 0x0 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC5A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A62 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x12CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xC7E SWAP2 SWAP1 PUSH2 0x1B31 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP3 POP POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCF1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x561 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD6D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x561 JUMP JUMPDEST PUSH2 0xD76 DUP2 PUSH2 0x1178 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 GT ISZERO DUP1 ISZERO PUSH2 0xD8D JUMPI POP PUSH1 0x0 SLOAD DUP3 LT JUMPDEST DUP1 ISZERO PUSH2 0x396 JUMPI POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE26 DUP3 PUSH2 0x104F JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0xE54 JUMPI POP DUP2 MLOAD PUSH2 0xE54 SWAP1 CALLER PUSH2 0x309 JUMP JUMPDEST DUP1 PUSH2 0xE6F JUMPI POP CALLER PUSH2 0xE64 DUP5 PUSH2 0x42E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP1 POP DUP1 PUSH2 0xE8F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CE44B5F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xEC4 JUMPI PUSH1 0x40 MLOAD PUSH3 0xA11481 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEEB JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A954ECD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xEFB PUSH1 0x0 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xDB2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT DUP1 DUP3 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 NOT ADD DUP4 AND OR SWAP1 SWAP3 SSTORE DUP10 DUP7 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD SWAP4 DUP5 AND SWAP4 DUP4 AND PUSH1 0x1 SWAP1 DUP2 ADD DUP5 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE DUP10 DUP7 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP5 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SWAP3 SSTORE SWAP1 DUP7 ADD DUP1 DUP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 AND PUSH2 0xFE7 JUMPI PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0xFE7 JUMPI DUP3 MLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP2 DUP7 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR OR SWAP1 SSTORE JUMPDEST POP DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x104B DUP3 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x1442 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 DUP1 PUSH1 0x1 GT ISZERO DUP1 ISZERO PUSH2 0x107F JUMPI POP PUSH1 0x0 SLOAD DUP2 LT JUMPDEST ISZERO PUSH2 0x115F JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x115D JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x10F3 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x0 NOT ADD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP3 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP4 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO PUSH2 0x1158 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x10F3 JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6F96CDA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0x120C SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x1B76 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1256 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1253 SWAP2 DUP2 ADD SWAP1 PUSH2 0x18EB JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x12B1 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1289 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0x12A9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x12EE JUMPI POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CC0 PUSH1 0x40 SWAP2 CODECOPY SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP5 MLOAD PUSH1 0x2 PUSH2 0x131D SWAP2 SWAP1 PUSH2 0x1BC5 JUMP JUMPDEST PUSH2 0x1327 SWAP2 SWAP1 PUSH2 0x1BDD JUMP JUMPDEST PUSH2 0x1332 SWAP1 PUSH1 0x4 PUSH2 0x1BFD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1341 DUP3 PUSH1 0x20 PUSH2 0x1BC5 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1367 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1391 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD DUP6 DUP7 MLOAD DUP2 ADD PUSH1 0x20 DUP5 ADD JUMPDEST DUP2 DUP4 LT ISZERO PUSH2 0x13FD JUMPI PUSH1 0x3 DUP4 ADD SWAP3 POP DUP3 MLOAD PUSH1 0x3F DUP2 PUSH1 0x12 SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 PUSH1 0xC SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 PUSH1 0x6 SHR AND DUP6 ADD MLOAD DUP3 MSTORE8 PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x3F DUP2 AND DUP6 ADD MLOAD DUP3 MSTORE8 POP PUSH1 0x1 ADD PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x3 DUP10 MLOAD MOD PUSH1 0x1 DUP2 EQ PUSH2 0x1417 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1428 JUMPI PUSH2 0x1434 JUMP JUMPDEST PUSH2 0x3D3D PUSH1 0xF0 SHL PUSH1 0x1 NOT DUP4 ADD MSTORE PUSH2 0x1434 JUMP JUMPDEST PUSH1 0x3D PUSH1 0xF8 SHL PUSH1 0x0 NOT DUP4 ADD MSTORE JUMPDEST POP SWAP4 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x4FB DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x1473 JUMPI PUSH1 0x40 MLOAD PUSH3 0x2E0763 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH2 0x1491 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB562E8DD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT DUP2 AND PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP13 ADD DUP2 AND SWAP2 DUP3 OR PUSH9 0x10000000000000000 PUSH8 0xFFFFFFFFFFFFFFFF NOT SWAP1 SWAP5 AND SWAP1 SWAP3 OR DUP4 SWAP1 DIV DUP2 AND DUP13 ADD DUP2 AND SWAP1 SWAP3 MUL OR SWAP1 SWAP2 SSTORE DUP6 DUP5 MSTORE PUSH1 0x4 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP3 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SSTORE DUP1 DUP1 DUP6 ADD DUP4 DUP1 ISZERO PUSH2 0x1543 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x15CC JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 PUSH2 0x1594 PUSH1 0x0 DUP9 DUP5 DUP1 PUSH1 0x1 ADD SWAP6 POP DUP9 PUSH2 0x11D7 JUMP JUMPDEST PUSH2 0x15B1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 DUP3 EQ ISZERO PUSH2 0x1549 JUMPI DUP3 PUSH1 0x0 SLOAD EQ PUSH2 0x15C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1612 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 DUP4 ADD SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 DUP3 SWAP1 LOG4 DUP1 DUP3 EQ ISZERO PUSH2 0x15CD JUMPI JUMPDEST POP PUSH1 0x0 SSTORE PUSH2 0x102A JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1627 SWAP1 PUSH2 0x1C48 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1649 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x168F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1662 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x168F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x168F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x168F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1674 JUMP JUMPDEST POP PUSH2 0x169B SWAP3 SWAP2 POP PUSH2 0x169F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x169B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x16A0 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT ISZERO PUSH2 0x16CF JUMPI PUSH2 0x16CF PUSH2 0x1C93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x16F7 JUMPI PUSH2 0x16F7 PUSH2 0x1C93 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP1 SWAP4 POP DUP6 DUP2 MSTORE DUP7 DUP7 DUP7 ADD GT ISZERO PUSH2 0x1710 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP8 DUP4 ADD ADD MSTORE POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1756 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1765 DUP4 DUP4 CALLDATALOAD PUSH1 0x20 DUP6 ADD PUSH2 0x16B4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x177D JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1765 DUP3 PUSH2 0x172A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1798 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x17A1 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH2 0x17AF PUSH1 0x20 DUP5 ADD PUSH2 0x172A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x17CC JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x17D5 DUP5 PUSH2 0x172A JUMP JUMPDEST SWAP3 POP PUSH2 0x17E3 PUSH1 0x20 DUP6 ADD PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1808 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1811 DUP6 PUSH2 0x172A JUMP JUMPDEST SWAP4 POP PUSH2 0x181F PUSH1 0x20 DUP7 ADD PUSH2 0x172A JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1841 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP6 ADD PUSH1 0x1F DUP2 ADD DUP8 SGT PUSH2 0x1851 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1860 DUP8 DUP3 CALLDATALOAD PUSH1 0x20 DUP5 ADD PUSH2 0x16B4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x187E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1887 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x189B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18B8 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x18C1 DUP4 PUSH2 0x172A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18E0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1765 DUP2 PUSH2 0x1CA9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18FC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1765 DUP2 PUSH2 0x1CA9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x191C JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1933 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0x193F DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1954 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x1960 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1975 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x1982 DUP8 DUP3 DUP9 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x1991 PUSH1 0x60 DUP7 ADD PUSH2 0x172A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AD JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x19C9 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x19E7 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x19F3 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A08 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x1A14 DUP9 DUP4 DUP10 ADD PUSH2 0x1746 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1A29 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x1860 DUP8 DUP3 DUP9 ADD PUSH2 0x1746 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A4E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x7B226E616D65223A220000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP5 MLOAD PUSH2 0x1A9A DUP2 PUSH1 0x9 DUP6 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH32 0x222C20226465736372697074696F6E223A220000000000000000000000000000 PUSH1 0x9 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x1AD7 DUP2 PUSH1 0x1B DUP5 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH32 0x222C2022696D616765223A202200000000000000000000000000000000000000 PUSH1 0x1B SWAP3 SWAP1 SWAP2 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x1B15 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1C1C JUMP JUMPDEST PUSH2 0x227D PUSH1 0xF0 SHL PUSH1 0x28 SWAP3 SWAP1 SWAP2 ADD SWAP2 DUP3 ADD MSTORE PUSH1 0x2A ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH32 0x646174613A6170706C69636174696F6E2F6A736F6E3B6261736536342C000000 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x1B69 DUP2 PUSH1 0x1D DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1C1C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1D ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1BA8 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1A36 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1765 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A36 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1BD8 JUMPI PUSH2 0x1BD8 PUSH2 0x1C7D JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1BF8 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1C17 JUMPI PUSH2 0x1C17 PUSH2 0x1C7D JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1C37 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1C1F JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5EC JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1C5C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xC91 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0xD76 JUMPI PUSH1 0x0 DUP1 REVERT INVALID COINBASE TIMESTAMP NUMBER DIFFICULTY GASLIMIT CHAINID SELFBALANCE 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F POP MLOAD MSTORE MSTORE8 SLOAD SSTORE JUMP JUMPI PC MSIZE GAS PUSH2 0x6263 PUSH5 0x6566676869 PUSH11 0x6B6C6D6E6F707172737475 PUSH23 0x7778797A303132333435363738392B2FA2646970667358 0x22 SLT KECCAK256 MSTORE 0xD5 SWAP12 DUP13 0xE5 EXTCODECOPY 0x25 0xE1 0x24 SIGNEXTEND 0x28 0xC2 0xC2 0xB3 DELEGATECALL PUSH25 0x38E6D438879C74E418D85822C533AED764736F6C6343000804 STOP CALLER ",
              "sourceMap": "92:72:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4843:300:13;;;;;;:::i;:::-;;:::i;:::-;;;8746:14:14;;8739:22;8721:41;;8709:2;8694:18;4843:300:13;;;;;;;;1230:26:12;;;;;-1:-1:-1;;;1230:26:12;;;;;;8139:98:13;;;:::i;:::-;;;;;;;:::i;9595:200::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7998:55:14;;;7980:74;;7968:2;7953:18;9595:200:13;7935:125:14;9172:362:13;;;;;;:::i;:::-;;:::i;:::-;;4114:297;1635:1:12;4364:12:13;4158:7;4348:13;:28;-1:-1:-1;;4348:46:13;4114:297;;;10730:25:14;;;10718:2;10703:18;4114:297:13;10685:76:14;10426:164:13;;;;;;:::i;:::-;;:::i;1648:224:12:-;;;;;;:::i;:::-;;:::i;10656:179:13:-;;;;;;:::i;:::-;;:::i;2368:63:12:-;;;:::i;7955:122:13:-;;;;;;:::i;:::-;;:::i;5202:203::-;;;;;;:::i;:::-;;:::i;1668:101:0:-;;;:::i;1036:85::-;1108:6;;-1:-1:-1;;;;;1108:6:0;1036:85;;8301:102:13;;;:::i;9862:274::-;;;;;;:::i;:::-;;:::i;10901:359::-;;;;;;:::i;:::-;;:::i;2437:277:12:-;;;;;;:::i;:::-;;:::i;1878:484::-;;;;;;:::i;:::-;;:::i;10202:162:13:-;;;;;;:::i;:::-;-1:-1:-1;;;;;10322:25:13;;;10299:4;10322:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10202:162;1918:198:0;;;;;;:::i;:::-;;:::i;4843:300:13:-;4945:4;-1:-1:-1;;;;;;4980:40:13;;-1:-1:-1;;;4980:40:13;;:104;;-1:-1:-1;;;;;;;5036:48:13;;-1:-1:-1;;;5036:48:13;4980:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:8;;;5100:36:13;4961:175;4843:300;-1:-1:-1;;4843:300:13:o;8139:98::-;8193:13;8225:5;8218:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:98;:::o;9595:200::-;9663:7;9687:16;9695:7;9687;:16::i;:::-;9682:64;;9712:34;;-1:-1:-1;;;9712:34:13;;;;;;;;;;;9682:64;-1:-1:-1;9764:24:13;;;;:15;:24;;;;;;-1:-1:-1;;;;;9764:24:13;;9595:200::o;9172:362::-;9244:13;9260:24;9276:7;9260:15;:24::i;:::-;9244:40;;9304:5;-1:-1:-1;;;;;9298:11:13;:2;-1:-1:-1;;;;;9298:11:13;;9294:48;;;9318:24;;-1:-1:-1;;;9318:24:13;;;;;;;;;;;9294:48;719:10:6;-1:-1:-1;;;;;9357:21:13;;;;;;:63;;-1:-1:-1;9383:37:13;9400:5;719:10:6;10202:162:13;:::i;9383:37::-;9382:38;9357:63;9353:136;;;9443:35;;-1:-1:-1;;;9443:35:13;;;;;;;;;;;9353:136;9499:28;9508:2;9512:7;9521:5;9499:8;:28::i;:::-;9172:362;;;:::o;10426:164::-;10555:28;10565:4;10571:2;10575:7;10555:9;:28::i;1648:224:12:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:6;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;10009:2:14;1240:68:0;;;9991:21:14;;;10028:18;;;10021:30;10087:34;10067:18;;;10060:62;10139:18;;1240:68:0;;;;;;;;;1802:34:12::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;1785:13:12;;1775:24;;:9:::1;:24:::0;;;;;;:61;;;;1802:34;;1775:24;;:61:::1;::::0;:24;;:61:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;1775:61:12::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;1775:61:12::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;1843:23;1853:9;1864:1;1843:9;:23::i;:::-;1648:224:::0;;;;:::o;10656:179:13:-;10789:39;10806:4;10812:2;10816:7;10789:39;;;;;;;;;;;;:16;:39::i;2368:63:12:-;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:6;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;10009:2:14;1240:68:0;;;9991:21:14;;;10028:18;;;10021:30;10087:34;10067:18;;;10060:62;10139:18;;1240:68:0;9981:182:14;1240:68:0;2412:6:12::1;:13:::0;;;::::1;-1:-1:-1::0;;;2412:13:12::1;::::0;;2368:63::o;7955:122:13:-;8019:7;8045:20;8057:7;8045:11;:20::i;:::-;:25;;7955:122;-1:-1:-1;;7955:122:13:o;5202:203::-;5266:7;-1:-1:-1;;;;;5289:19:13;;5285:60;;5317:28;;-1:-1:-1;;;5317:28:13;;;;;;;;;;;5285:60;-1:-1:-1;;;;;;5370:19:13;;;;;:12;:19;;;;;:27;;;;5202:203::o;1668:101:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:6;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;10009:2:14;1240:68:0;;;9991:21:14;;;10028:18;;;10021:30;10087:34;10067:18;;;10060:62;10139:18;;1240:68:0;9981:182:14;1240:68:0;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;8301:102:13:-;8357:13;8389:7;8382:14;;;;;:::i;9862:274::-;-1:-1:-1;;;;;9952:24:13;;719:10:6;9952:24:13;9948:54;;;9985:17;;-1:-1:-1;;;9985:17:13;;;;;;;;;;;9948:54;719:10:6;10013:32:13;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10013:42:13;;;;;;;;;;;;:53;;-1:-1:-1;;10013:53:13;;;;;;;;;;10081:48;;8721:41:14;;;10013:42:13;;719:10:6;10081:48:13;;8694:18:14;10081:48:13;;;;;;;9862:274;;:::o;10901:359::-;11062:28;11072:4;11078:2;11082:7;11062:9;:28::i;:::-;-1:-1:-1;;;;;11104:13:13;;1465:19:5;:23;;11104:76:13;;;;;11124:56;11155:4;11161:2;11165:7;11174:5;11124:30;:56::i;:::-;11123:57;11104:76;11100:154;;;11203:40;;-1:-1:-1;;;11203:40:13;;;;;;;;;;;2437:277:12;2565:7;1459:16;1467:7;1459;:16::i;:::-;1451:76;;;;-1:-1:-1;;;1451:76:12;;10370:2:14;1451:76:12;;;10352:21:14;10409:2;10389:18;;;10382:30;10448:34;10428:18;;;10421:62;-1:-1:-1;;;10499:18:14;;;10492:45;10554:19;;1451:76:12;10342:237:14;1451:76:12;1108:6:0;;-1:-1:-1;;;;;1108:6:0;719:10:6;1248:23:0::1;1240:68;;;::::0;-1:-1:-1;;;1240:68:0;;10009:2:14;1240:68:0::1;::::0;::::1;9991:21:14::0;;;10028:18;;;10021:30;10087:34;10067:18;;;10060:62;10139:18;;1240:68:0::1;9981:182:14::0;1240:68:0::1;2601:6:12::2;::::0;-1:-1:-1;;;2601:6:12;::::2;;;2600:7;2591:55;;;::::0;-1:-1:-1;;;2591:55:12;;9606:2:14;2591:55:12::2;::::0;::::2;9588:21:14::0;9645:2;9625:18;;;9618:30;9684:34;9664:18;;;9657:62;-1:-1:-1;;;9735:18:14;;;9728:32;9777:19;;2591:55:12::2;9578:224:14::0;2591:55:12::2;2674:34;::::0;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;;;;;;;;;-1:-1:-1;2653:18:12;;;:9:::2;:18:::0;;;;;;:55;;;;2674:34;;2653:18;;:55:::2;::::0;:18;;:55:::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;2653:55:12::2;::::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;2653:55:12::2;::::0;::::2;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;;;;;;;;2437:277:12:o;1878:484::-;1972:13;1954:7;1459:16;1467:7;1459;:16::i;:::-;1451:76;;;;-1:-1:-1;;;1451:76:12;;10370:2:14;1451:76:12;;;10352:21:14;10409:2;10389:18;;;10382:30;10448:34;10428:18;;;10421:62;-1:-1:-1;;;10499:18:14;;;10492:45;10554:19;;1451:76:12;10342:237:14;1451:76:12;1994:24:::1;2021:18:::0;;;:9:::1;:18;::::0;;;;;1994:45;;::::1;::::0;::::1;::::0;;;;;;;2021:18;;1994:45:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;2143:197;2219:8;:13;;;2256:8;:20;;;2295:8;:14;;;2189:127;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2143:13;:197::i;:::-;2074:275;;;;;;;;:::i;:::-;;;;;;;;;;;;;2052:304;;;1534:1;1878:484:::0;;;;:::o;1918:198:0:-;1108:6;;-1:-1:-1;;;;;1108:6:0;719:10:6;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;10009:2:14;1240:68:0;;;9991:21:14;;;10028:18;;;10021:30;10087:34;10067:18;;;10060:62;10139:18;;1240:68:0;9981:182:14;1240:68:0;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;9199:2:14;1998:73:0::1;::::0;::::1;9181:21:14::0;9238:2;9218:18;;;9211:30;9277:34;9257:18;;;9250:62;9348:8;9328:18;;;9321:36;9374:19;;1998:73:0::1;9171:228:14::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;11506:184:13:-;11563:4;11605:7;1635:1:12;11586:26:13;;:53;;;;;11626:13;;11616:7;:23;11586:53;:97;;;;-1:-1:-1;;11656:20:13;;;;:11;:20;;;;;:27;-1:-1:-1;;;11656:27:13;;;;11655:28;;11506:184::o;18922:189::-;19032:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;19032:29:13;-1:-1:-1;;;;;19032:29:13;;;;;;;;;19076:28;;19032:24;;19076:28;;;;;;;18922:189;;;:::o;14528:2067::-;14638:35;14676:20;14688:7;14676:11;:20::i;:::-;14749:18;;14638:58;;-1:-1:-1;14707:22:13;;-1:-1:-1;;;;;14733:34:13;719:10:6;-1:-1:-1;;;;;14733:34:13;;:100;;;-1:-1:-1;14800:18:13;;14783:50;;719:10:6;10202:162:13;:::i;14783:50::-;14733:152;;;-1:-1:-1;719:10:6;14849:20:13;14861:7;14849:11;:20::i;:::-;-1:-1:-1;;;;;14849:36:13;;14733:152;14707:179;;14902:17;14897:66;;14928:35;;-1:-1:-1;;;14928:35:13;;;;;;;;;;;14897:66;14999:4;-1:-1:-1;;;;;14977:26:13;:13;:18;;;-1:-1:-1;;;;;14977:26:13;;14973:67;;15012:28;;-1:-1:-1;;;15012:28:13;;;;;;;;;;;14973:67;-1:-1:-1;;;;;15054:16:13;;15050:52;;15079:23;;-1:-1:-1;;;15079:23:13;;;;;;;;;;;15050:52;15218:49;15235:1;15239:7;15248:13;:18;;;15218:8;:49::i;:::-;-1:-1:-1;;;;;15557:18:13;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;15557:31:13;;;;;;;-1:-1:-1;;15557:31:13;;;;;;;15602:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;15602:29:13;;;;;;;;;;;15646:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;15690:61:13;;;;-1:-1:-1;;;15735:15:13;15690:61;;;;;;;;;;;16021:11;;;16050:24;;;;;:29;16021:11;;16050:29;16046:438;;16272:13;;16258:11;:27;16254:216;;;16341:18;;;16309:24;;;:11;:24;;;;;;;;:50;;16423:28;;;;16381:70;;-1:-1:-1;;;16381:70:13;-1:-1:-1;;;;;;16381:70:13;;;-1:-1:-1;;;;;16309:50:13;;;16381:70;;;;;;;16254:216;14528:2067;16528:7;16524:2;-1:-1:-1;;;;;16509:27:13;16518:4;-1:-1:-1;;;;;16509:27:13;;;;;;;;;;;16546:42;14528:2067;;;;;:::o;11696:102::-;11764:27;11774:2;11778:8;11764:27;;;;;;;;;;;;:9;:27::i;:::-;11696:102;;:::o;6815:1083::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;6924:7:13;;1635:1:12;6970:23:13;;:47;;;;;7004:13;;6997:4;:20;6970:47;6966:868;;;7037:31;7071:17;;;:11;:17;;;;;;;;;7037:51;;;;;;;;;-1:-1:-1;;;;;7037:51:13;;;;-1:-1:-1;;;7037:51:13;;;;;;;;;;;-1:-1:-1;;;7037:51:13;;;;;;;;;;;;;;7106:714;;7155:14;;-1:-1:-1;;;;;7155:28:13;;7151:99;;7218:9;6815:1083;-1:-1:-1;;;6815:1083:13:o;7151:99::-;-1:-1:-1;;;7586:6:13;7630:17;;;;:11;:17;;;;;;;;;7618:29;;;;;;;;;-1:-1:-1;;;;;7618:29:13;;;;;-1:-1:-1;;;7618:29:13;;;;;;;;;;;-1:-1:-1;;;7618:29:13;;;;;;;;;;;;;7677:28;7673:107;;7744:9;6815:1083;-1:-1:-1;;;6815:1083:13:o;7673:107::-;7547:255;;;6966:868;;7860:31;;-1:-1:-1;;;7860:31:13;;;;;;;;;;;2270:187:0;2362:6;;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;2378:17:0;;;;;;;2410:40;;2362:6;;;2378:17;2362:6;;2410:40;;2343:16;;2410:40;2270:187;;:::o;19592:650:13:-;19770:72;;-1:-1:-1;;;19770:72:13;;19750:4;;-1:-1:-1;;;;;19770:36:13;;;;;:72;;719:10:6;;19821:4:13;;19827:7;;19836:5;;19770:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19770:72:13;;;;;;;;-1:-1:-1;;19770:72:13;;;;;;;;;;;;:::i;:::-;;;19766:470;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20001:13:13;;19997:229;;20046:40;;-1:-1:-1;;;20046:40:13;;;;;;;;;;;19997:229;20186:6;20180:13;20171:6;20167:2;20163:15;20156:38;19766:470;-1:-1:-1;;;;;;19888:55:13;-1:-1:-1;;;19888:55:13;;-1:-1:-1;19592:650:13;;;;;;:::o;777:1861:10:-;835:13;864:4;:11;879:1;864:16;860:31;;;-1:-1:-1;;882:9:10;;;;;;;;;-1:-1:-1;882:9:10;;;777:1861::o;860:31::-;940:19;962:12;;;;;;;;;;;;;;;;;940:34;;1023:18;1069:1;1050:4;:11;1064:1;1050:15;;;;:::i;:::-;1049:21;;;;:::i;:::-;1044:27;;:1;:27;:::i;:::-;1023:48;-1:-1:-1;1151:20:10;1185:15;1023:48;1198:2;1185:15;:::i;:::-;1174:27;;;;;;-1:-1:-1;;;1174:27:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1174:27:10;;1151:50;;1294:10;1286:6;1279:26;1386:1;1379:5;1375:13;1442:4;1492;1486:11;1477:7;1473:25;1585:2;1577:6;1573:15;1655:739;1674:6;1665:7;1662:19;1655:739;;;1771:1;1762:7;1758:15;1747:26;;1809:7;1803:14;1932:4;1924:5;1920:2;1916:14;1912:25;1902:8;1898:40;1892:47;1881:9;1873:67;1985:1;1974:9;1970:17;1957:30;;2063:4;2055:5;2051:2;2047:14;2043:25;2033:8;2029:40;2023:47;2012:9;2004:67;2116:1;2105:9;2101:17;2088:30;;2194:4;2186:5;2183:1;2178:14;2174:25;2164:8;2160:40;2154:47;2143:9;2135:67;2247:1;2236:9;2232:17;2219:30;;2325:4;2317:5;2305:25;2295:8;2291:40;2285:47;2274:9;2266:67;-1:-1:-1;2378:1:10;2363:17;1655:739;;;2464:1;2457:4;2451:11;2447:19;2484:1;2479:54;;;;2551:1;2546:52;;;;2440:158;;2479:54;-1:-1:-1;;;;;2495:17:10;;2488:43;2479:54;;2546:52;-1:-1:-1;;;;;2562:17:10;;2555:41;2440:158;-1:-1:-1;2625:6:10;;777:1861;-1:-1:-1;;;;;;;;777:1861:10:o;12149:157:13:-;12267:32;12273:2;12277:8;12287:5;12294:4;12686:20;12709:13;-1:-1:-1;;;;;12736:16:13;;12732:48;;12761:19;;-1:-1:-1;;;12761:19:13;;;;;;;;;;;12732:48;12794:13;12790:44;;12816:18;;-1:-1:-1;;;12816:18:13;;;;;;;;;;;12790:44;-1:-1:-1;;;;;13177:16:13;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;13235:49:13;;13177:44;;;;;;;;13235:49;;;;-1:-1:-1;;13177:44:13;;;;;;13235:49;;;;;;;;;;;;;;;;13299:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;13348:66:13;;;;-1:-1:-1;;;13398:15:13;13348:66;;;;;;;;;;13299:25;13492:23;;;13534:4;:23;;;;-1:-1:-1;;;;;;13542:13:13;;1465:19:5;:23;;13542:15:13;13530:628;;;13577:309;13607:38;;13632:12;;-1:-1:-1;;;;;13607:38:13;;;13624:1;;13607:38;;13624:1;;13607:38;13672:69;13711:1;13715:2;13719:14;;;;;;13735:5;13672:30;:69::i;:::-;13667:172;;13776:40;;-1:-1:-1;;;13776:40:13;;;;;;;;;;;13667:172;13881:3;13865:12;:19;;13577:309;;13965:12;13948:13;;:29;13944:43;;13979:8;;;13944:43;13530:628;;;14026:118;14056:40;;14081:14;;;;;-1:-1:-1;;;;;14056:40:13;;;14073:1;;14056:40;;14073:1;;14056:40;14139:3;14123:12;:19;;14026:118;;13530:628;-1:-1:-1;14171:13:13;:28;14219:60;1648:224:12;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:14;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:14;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:196::-;718:20;;-1:-1:-1;;;;;767:54:14;;757:65;;747:2;;836:1;833;826:12;747:2;699:147;;;:::o;851:229::-;894:5;947:3;940:4;932:6;928:17;924:27;914:2;;969:5;962;955:20;914:2;995:79;1070:3;1061:6;1048:20;1041:4;1033:6;1029:17;995:79;:::i;:::-;986:88;904:176;-1:-1:-1;;;904:176:14:o;1085:196::-;1144:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:2;;;1218:6;1210;1203:22;1165:2;1246:29;1265:9;1246:29;:::i;1286:270::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;1436:6;1428;1421:22;1383:2;1464:29;1483:9;1464:29;:::i;:::-;1454:39;;1512:38;1546:2;1535:9;1531:18;1512:38;:::i;:::-;1502:48;;1373:183;;;;;:::o;1561:338::-;1638:6;1646;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1756:29;1775:9;1756:29;:::i;:::-;1746:39;;1804:38;1838:2;1827:9;1823:18;1804:38;:::i;:::-;1794:48;;1889:2;1878:9;1874:18;1861:32;1851:42;;1665:234;;;;;:::o;1904:696::-;1999:6;2007;2015;2023;2076:3;2064:9;2055:7;2051:23;2047:33;2044:2;;;2098:6;2090;2083:22;2044:2;2126:29;2145:9;2126:29;:::i;:::-;2116:39;;2174:38;2208:2;2197:9;2193:18;2174:38;:::i;:::-;2164:48;;2259:2;2248:9;2244:18;2231:32;2221:42;;2314:2;2303:9;2299:18;2286:32;2341:18;2333:6;2330:30;2327:2;;;2378:6;2370;2363:22;2327:2;2406:22;;2459:4;2451:13;;2447:27;-1:-1:-1;2437:2:14;;2493:6;2485;2478:22;2437:2;2521:73;2586:7;2581:2;2568:16;2563:2;2559;2555:11;2521:73;:::i;:::-;2511:83;;;2034:566;;;;;;;:::o;2605:367::-;2670:6;2678;2731:2;2719:9;2710:7;2706:23;2702:32;2699:2;;;2752:6;2744;2737:22;2699:2;2780:29;2799:9;2780:29;:::i;:::-;2770:39;;2859:2;2848:9;2844:18;2831:32;2906:5;2899:13;2892:21;2885:5;2882:32;2872:2;;2933:6;2925;2918:22;2872:2;2961:5;2951:15;;;2689:283;;;;;:::o;2977:264::-;3045:6;3053;3106:2;3094:9;3085:7;3081:23;3077:32;3074:2;;;3127:6;3119;3112:22;3074:2;3155:29;3174:9;3155:29;:::i;:::-;3145:39;3231:2;3216:18;;;;3203:32;;-1:-1:-1;;;3064:177:14:o;3246:255::-;3304:6;3357:2;3345:9;3336:7;3332:23;3328:32;3325:2;;;3378:6;3370;3363:22;3325:2;3422:9;3409:23;3441:30;3465:5;3441:30;:::i;3506:259::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:2;;;3649:6;3641;3634:22;3596:2;3686:9;3680:16;3705:30;3729:5;3705:30;:::i;3770:858::-;3886:6;3894;3902;3910;3963:3;3951:9;3942:7;3938:23;3934:33;3931:2;;;3985:6;3977;3970:22;3931:2;4030:9;4017:23;4059:18;4100:2;4092:6;4089:14;4086:2;;;4121:6;4113;4106:22;4086:2;4149:50;4191:7;4182:6;4171:9;4167:22;4149:50;:::i;:::-;4139:60;;4252:2;4241:9;4237:18;4224:32;4208:48;;4281:2;4271:8;4268:16;4265:2;;;4302:6;4294;4287:22;4265:2;4330:52;4374:7;4363:8;4352:9;4348:24;4330:52;:::i;:::-;4320:62;;4435:2;4424:9;4420:18;4407:32;4391:48;;4464:2;4454:8;4451:16;4448:2;;;4485:6;4477;4470:22;4448:2;;4513:52;4557:7;4546:8;4535:9;4531:24;4513:52;:::i;:::-;4503:62;;;4584:38;4618:2;4607:9;4603:18;4584:38;:::i;:::-;4574:48;;3921:707;;;;;;;:::o;4633:190::-;4692:6;4745:2;4733:9;4724:7;4720:23;4716:32;4713:2;;;4766:6;4758;4751:22;4713:2;-1:-1:-1;4794:23:14;;4703:120;-1:-1:-1;4703:120:14:o;4828:852::-;4944:6;4952;4960;4968;5021:3;5009:9;5000:7;4996:23;4992:33;4989:2;;;5043:6;5035;5028:22;4989:2;5084:9;5071:23;5061:33;;5145:2;5134:9;5130:18;5117:32;5168:18;5209:2;5201:6;5198:14;5195:2;;;5230:6;5222;5215:22;5195:2;5258:50;5300:7;5291:6;5280:9;5276:22;5258:50;:::i;:::-;5248:60;;5361:2;5350:9;5346:18;5333:32;5317:48;;5390:2;5380:8;5377:16;5374:2;;;5411:6;5403;5396:22;5374:2;5439:52;5483:7;5472:8;5461:9;5457:24;5439:52;:::i;:::-;5429:62;;5544:2;5533:9;5529:18;5516:32;5500:48;;5573:2;5563:8;5560:16;5557:2;;;5594:6;5586;5579:22;5557:2;;5622:52;5666:7;5655:8;5644:9;5640:24;5622:52;:::i;5685:257::-;5726:3;5764:5;5758:12;5791:6;5786:3;5779:19;5807:63;5863:6;5856:4;5851:3;5847:14;5840:4;5833:5;5829:16;5807:63;:::i;:::-;5924:2;5903:15;-1:-1:-1;;5899:29:14;5890:39;;;;5931:4;5886:50;;5734:208;-1:-1:-1;;5734:208:14:o;5947:1429::-;6608:66;6603:3;6596:79;6578:3;6704:6;6698:13;6720:61;6774:6;6770:1;6765:3;6761:11;6754:4;6746:6;6742:17;6720:61;:::i;:::-;6844:66;6840:1;6800:16;;;6832:10;;;6825:86;6936:13;;6958:63;6936:13;7007:2;6999:11;;6992:4;6980:17;;6958:63;:::i;:::-;7086:66;7081:2;7040:17;;;;7073:11;;;7066:87;7178:13;;7200:63;7178:13;7249:2;7241:11;;7234:4;7222:17;;7200:63;:::i;:::-;-1:-1:-1;;;7323:2:14;7282:17;;;;7315:11;;;7308:35;7367:2;7359:11;;6586:790;-1:-1:-1;;;;;6586:790:14:o;7381:448::-;7643:31;7638:3;7631:44;7613:3;7704:6;7698:13;7720:62;7775:6;7770:2;7765:3;7761:12;7754:4;7746:6;7742:17;7720:62;:::i;:::-;7802:16;;;;7820:2;7798:25;;7621:208;-1:-1:-1;;7621:208:14:o;8065:511::-;8259:4;-1:-1:-1;;;;;8369:2:14;8361:6;8357:15;8346:9;8339:34;8421:2;8413:6;8409:15;8404:2;8393:9;8389:18;8382:43;;8461:6;8456:2;8445:9;8441:18;8434:34;8504:3;8499:2;8488:9;8484:18;8477:31;8525:45;8565:3;8554:9;8550:19;8542:6;8525:45;:::i;:::-;8517:53;8268:308;-1:-1:-1;;;;;;8268:308:14:o;8773:219::-;8922:2;8911:9;8904:21;8885:4;8942:44;8982:2;8971:9;8967:18;8959:6;8942:44;:::i;10766:128::-;10806:3;10837:1;10833:6;10830:1;10827:13;10824:2;;;10843:18;;:::i;:::-;-1:-1:-1;10879:9:14;;10814:80::o;10899:217::-;10939:1;10965;10955:2;;-1:-1:-1;;;10990:31:14;;11044:4;11041:1;11034:15;11072:4;10997:1;11062:15;10955:2;-1:-1:-1;11101:9:14;;10945:171::o;11121:168::-;11161:7;11227:1;11223;11219:6;11215:14;11212:1;11209:21;11204:1;11197:9;11190:17;11186:45;11183:2;;;11234:18;;:::i;:::-;-1:-1:-1;11274:9:14;;11173:116::o;11294:258::-;11366:1;11376:113;11390:6;11387:1;11384:13;11376:113;;;11466:11;;;11460:18;11447:11;;;11440:39;11412:2;11405:10;11376:113;;;11507:6;11504:1;11501:13;11498:2;;;-1:-1:-1;;11542:1:14;11524:16;;11517:27;11347:205::o;11557:380::-;11636:1;11632:12;;;;11679;;;11700:2;;11754:4;11746:6;11742:17;11732:27;;11700:2;11807;11799:6;11796:14;11776:18;11773:38;11770:2;;;11853:10;11848:3;11844:20;11841:1;11834:31;11888:4;11885:1;11878:15;11916:4;11913:1;11906:15;11942:127;12003:10;11998:3;11994:20;11991:1;11984:31;12034:4;12031:1;12024:15;12058:4;12055:1;12048:15;12074:127;12135:10;12130:3;12126:20;12123:1;12116:31;12166:4;12163:1;12156:15;12190:4;12187:1;12180:15;12206:131;-1:-1:-1;;;;;;12280:32:14;;12270:43;;12260:2;;12327:1;12324;12317:12"
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "freeze()": "62a5af3b",
              "frozen()": "054f7d9c",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mint(string,string,string,address)": "2aedc3f9",
              "name()": "06fdde03",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "renounceOwnership()": "715018a6",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferOwnership(address)": "f2fde38b",
              "updateMetadata(uint256,string,string,string)": "c401aa99"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalToCurrentOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApproveToCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceQueryForZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintZeroQuantity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFromIncorrectOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToNonERC721ReceiverImplementer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToZeroAddress\",\"type\":\"error\"},{\"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\":\"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\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"frozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"}],\"name\":\"updateMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Mocks/NFT.sol\":\"NFT\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"base64-sol/base64.sol\":{\"keccak256\":\"0xa73959e6ef0b693e4423a562e612370160b934a75e618361ddd8c9c4b8ddbaaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c12e16d8d66f3af15d8787920bd41ca6c1e7517a212a6b9cebd4b6d38f36fe\",\"dweb:/ipfs/QmcXMnZUXEz6LRKsm3CSvqdPboAzmezavi8bTg2dRxM2yE\"]},\"contracts/Mocks/NFT.sol\":{\"keccak256\":\"0x83f7d31dfdf2a15d925733f908a3f790d455154be34d9611dfc94945c7171c49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://598e7e08007996f058288a51fec7c721cd9d10e9aa6657354455e3c3e42ed34c\",\"dweb:/ipfs/QmUjk8S9gYmTJy5KVyKksfSEkFV6QZUuQoLyybsCon1wi7\"]},\"contracts/OneOfOnes.sol\":{\"keccak256\":\"0x91b0de33aec8b4e8287891d76b560554f883bc5492d42a179170911e9412f596\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e7b84d8241603137438be50ae243dadad7ba43766d0833e4d22dd9caadab929\",\"dweb:/ipfs/QmdPSumv3h7QDt7L2uCesJgE1y3Jgj41Lae6pWpWegTTmA\"]},\"erc721a/contracts/ERC721A.sol\":{\"keccak256\":\"0x5a3f70f309452b24ff4268be3c57c88f2c9aa7b8711b4951f0521fd0488b7b51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2b72bf6e6556d459e5887094a2eeff26aa83d1031092f056a93ea746e02bcd0\",\"dweb:/ipfs/QmS9FvFwmUJvzsQqBUHQ7xFyXkoJwMtRcVmPmBMQn3QnVK\"]}},\"version\":1}"
        }
      },
      "contracts/OneOfOnes.sol": {
        "OneOfOnes": {
          "abi": [
            {
              "inputs": [],
              "name": "ApprovalCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalToCurrentOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApproveToCaller",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BalanceQueryForZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MintToZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "MintZeroQuantity",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OwnerQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferFromIncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToNonERC721ReceiverImplementer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToZeroAddress",
              "type": "error"
            },
            {
              "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": "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": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "freeze",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "frozen",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "description",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "image",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "description",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "image",
                  "type": "string"
                }
              ],
              "name": "updateMetadata",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "freeze()": "62a5af3b",
              "frozen()": "054f7d9c",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mint(string,string,string,address)": "2aedc3f9",
              "name()": "06fdde03",
              "owner()": "8da5cb5b",
              "ownerOf(uint256)": "6352211e",
              "renounceOwnership()": "715018a6",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd",
              "transferOwnership(address)": "f2fde38b",
              "updateMetadata(uint256,string,string,string)": "c401aa99"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ApprovalCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalToCurrentOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApproveToCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceQueryForZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MintZeroQuantity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFromIncorrectOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToNonERC721ReceiverImplementer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToZeroAddress\",\"type\":\"error\"},{\"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\":\"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\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"frozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"image\",\"type\":\"string\"}],\"name\":\"updateMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OneOfOnes.sol\":\"OneOfOnes\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"base64-sol/base64.sol\":{\"keccak256\":\"0xa73959e6ef0b693e4423a562e612370160b934a75e618361ddd8c9c4b8ddbaaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c12e16d8d66f3af15d8787920bd41ca6c1e7517a212a6b9cebd4b6d38f36fe\",\"dweb:/ipfs/QmcXMnZUXEz6LRKsm3CSvqdPboAzmezavi8bTg2dRxM2yE\"]},\"contracts/OneOfOnes.sol\":{\"keccak256\":\"0x91b0de33aec8b4e8287891d76b560554f883bc5492d42a179170911e9412f596\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e7b84d8241603137438be50ae243dadad7ba43766d0833e4d22dd9caadab929\",\"dweb:/ipfs/QmdPSumv3h7QDt7L2uCesJgE1y3Jgj41Lae6pWpWegTTmA\"]},\"erc721a/contracts/ERC721A.sol\":{\"keccak256\":\"0x5a3f70f309452b24ff4268be3c57c88f2c9aa7b8711b4951f0521fd0488b7b51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2b72bf6e6556d459e5887094a2eeff26aa83d1031092f056a93ea746e02bcd0\",\"dweb:/ipfs/QmS9FvFwmUJvzsQqBUHQ7xFyXkoJwMtRcVmPmBMQn3QnVK\"]}},\"version\":1}"
        }
      },
      "erc721a/contracts/ERC721A.sol": {
        "ERC721A": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "ApprovalCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApprovalToCurrentOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ApproveToCaller",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "BalanceQueryForZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "OwnerQueryForNonexistentToken",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferCallerNotOwnerNorApproved",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferFromIncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToNonERC721ReceiverImplementer",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "TransferToZeroAddress",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "URIQueryForNonexistentToken",
              "type": "error"
            },
            {
              "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": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "getApproved",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "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": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ownerOf",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "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": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "tokenURI",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2039:14",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:14",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "78:845:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "127:24:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "136:5:14"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "143:5:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "129:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "129:20:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "129:20:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "106:6:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "114:4:14",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "102:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "102:17:14"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "121:3:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "98:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "98:27:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "91:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "91:35:14"
                              },
                              "nodeType": "YulIf",
                              "src": "88:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "160:23:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "176:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "170:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "170:13:14"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "164:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "192:28:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "210:2:14",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "214:1:14",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "206:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "206:10:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "218:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "202:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "202:18:14"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "196:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "243:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "245:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "245:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "245:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "235:2:14"
                                  },
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "239:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "232:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "232:10:14"
                              },
                              "nodeType": "YulIf",
                              "src": "229:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "274:17:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "288:2:14",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "284:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "284:7:14"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "278:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "300:23:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "320:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "314:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "314:9:14"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "304:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "332:71:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "354:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_1",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "378:2:14"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "382:4:14",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "374:3:14"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "374:13:14"
                                              },
                                              {
                                                "name": "_3",
                                                "nodeType": "YulIdentifier",
                                                "src": "389:2:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "370:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "370:22:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "394:2:14",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "366:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "366:31:14"
                                      },
                                      {
                                        "name": "_3",
                                        "nodeType": "YulIdentifier",
                                        "src": "399:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "362:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "362:40:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "350:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "350:53:14"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "336:10:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "462:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "464:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "464:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "464:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "421:10:14"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "433:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "418:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "418:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "441:10:14"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "453:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "438:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "438:22:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "415:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "415:46:14"
                              },
                              "nodeType": "YulIf",
                              "src": "412:2:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "500:2:14",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "504:10:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "493:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "493:22:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "493:22:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "531:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "539:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "524:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "524:18:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "524:18:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "551:14:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "561:4:14",
                                "type": "",
                                "value": "0x20"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "555:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "611:24:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "620:5:14"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "627:5:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "613:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "613:20:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "613:20:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "588:6:14"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "596:2:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "584:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "584:15:14"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "601:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "580:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "580:24:14"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "606:3:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "577:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "577:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "574:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "644:14:14",
                              "value": {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "653:5:14"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "648:1:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "713:87:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "742:6:14"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "750:1:14"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "738:3:14"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "738:14:14"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "754:2:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "734:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "734:23:14"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "offset",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "773:6:14"
                                                    },
                                                    {
                                                      "name": "i",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "781:1:14"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "add",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "769:3:14"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "769:14:14"
                                                },
                                                {
                                                  "name": "_4",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "785:2:14"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "765:3:14"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "765:23:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "759:5:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "759:30:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "727:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "727:63:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "727:63:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "678:1:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "681:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "675:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "675:9:14"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "685:19:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "687:15:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "696:1:14"
                                        },
                                        {
                                          "name": "_4",
                                          "nodeType": "YulIdentifier",
                                          "src": "699:2:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "692:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "692:10:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "687:1:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "671:3:14",
                                "statements": []
                              },
                              "src": "667:133:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "830:63:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "memPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "859:6:14"
                                                },
                                                {
                                                  "name": "_1",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "867:2:14"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "855:3:14"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "855:15:14"
                                            },
                                            {
                                              "name": "_4",
                                              "nodeType": "YulIdentifier",
                                              "src": "872:2:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "851:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "851:24:14"
                                        },
                                        {
                                          "name": "array",
                                          "nodeType": "YulIdentifier",
                                          "src": "877:5:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "844:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "844:39:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "844:39:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "815:1:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "818:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "812:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "812:9:14"
                              },
                              "nodeType": "YulIf",
                              "src": "809:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "902:15:14",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "911:6:14"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "902:5:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_string_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "52:6:14",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "60:3:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "68:5:14",
                            "type": ""
                          }
                        ],
                        "src": "14:909:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1046:474:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1092:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1101:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1109:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1094:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1094:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1094:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1067:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1076:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1063:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1063:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1088:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1059:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1059:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1056:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1127:30:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1147:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1141:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1141:16:14"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1131:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1166:28:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1184:2:14",
                                        "type": "",
                                        "value": "64"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1188:1:14",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1180:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1180:10:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1192:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1176:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1176:18:14"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1170:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1221:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1230:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1238:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1223:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1223:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1223:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1209:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1217:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1206:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1206:14:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1203:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1256:71:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1299:9:14"
                                      },
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "1310:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1295:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1295:22:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1319:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1266:28:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1266:61:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1336:41:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1362:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1373:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1358:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1358:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1352:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1352:25:14"
                              },
                              "variables": [
                                {
                                  "name": "offset_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1340:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1406:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1415:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "1423:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1408:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1408:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1408:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1392:8:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1402:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1389:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1389:16:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1386:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1441:73:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1484:9:14"
                                      },
                                      {
                                        "name": "offset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1495:8:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1480:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1480:24:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "1506:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_string_fromMemory",
                                  "nodeType": "YulIdentifier",
                                  "src": "1451:28:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1451:63:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1441:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1004:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1015:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1027:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1035:6:14",
                            "type": ""
                          }
                        ],
                        "src": "928:592:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1580:325:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1590:22:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1604:1:14",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1607:4:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1600:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1600:12:14"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "1590:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1621:38:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "1651:4:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1657:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1647:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1647:12:14"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "1625:18:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1698:31:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1700:27:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "1714:6:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1722:4:14",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "1710:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1710:17:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1700:6:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1678:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1671:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1671:26:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1668:2:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1788:111:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1809:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1816:3:14",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1821:10:14",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "1812:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1812:20:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1802:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1802:31:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1802:31:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1853:1:14",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1856:4:14",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1846:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1846:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1846:15:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1881:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1884:4:14",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1874:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1874:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1874:15:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "1744:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "1767:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1775:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1764:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1764:14:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "1741:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1741:38:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1738:2:14"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "1560:4:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "1569:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1525:380:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1942:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1959:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1966:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1971:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1962:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1962:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1952:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1952:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1952:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1999:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2002:4:14",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1992:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1992:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1992:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2023:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2026:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2016:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2016:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2016:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "1910:127:14"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(array, array) }\n        let i := array\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), array)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(value0, value0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(value1, value1) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n}",
                  "id": 14,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "linkReferences": {},
              "object": "60806040523480156200001157600080fd5b50604051620012d8380380620012d88339810160408190526200003491620001c5565b8151620000499060029060208501906200006c565b5080516200005f9060039060208401906200006c565b505060008055506200027f565b8280546200007a906200022c565b90600052602060002090601f0160209004810192826200009e5760008555620000e9565b82601f10620000b957805160ff1916838001178555620000e9565b82800160010185558215620000e9579182015b82811115620000e9578251825591602001919060010190620000cc565b50620000f7929150620000fb565b5090565b5b80821115620000f75760008155600101620000fc565b600082601f83011262000123578081fd5b81516001600160401b038082111562000140576200014062000269565b604051601f8301601f19908116603f011681019082821181831017156200016b576200016b62000269565b8160405283815260209250868385880101111562000187578485fd5b8491505b83821015620001aa57858201830151818301840152908201906200018b565b83821115620001bb57848385830101525b9695505050505050565b60008060408385031215620001d8578182fd5b82516001600160401b0380821115620001ef578384fd5b620001fd8683870162000112565b9350602085015191508082111562000213578283fd5b50620002228582860162000112565b9150509250929050565b600181811c908216806200024157607f821691505b602082108114156200026357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611049806200028f6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101d6578063b88d4fde146101e9578063c87b56dd146101fc578063e985e9c51461020f57600080fd5b80636352211e146101a857806370a08231146101bb57806395d89b41146101ce57600080fd5b8063095ea7b3116100c8578063095ea7b31461015757806318160ddd1461016c57806323b872dd1461018257806342842e0e1461019557600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd366004610de5565b61024b565b60405190151581526020015b60405180910390f35b61011f61029d565b60405161010e9190610ecc565b61013f61013a366004610e1d565b61032f565b6040516001600160a01b03909116815260200161010e565b61016a610165366004610dbc565b610373565b005b600154600054035b60405190815260200161010e565b61016a610190366004610c72565b610401565b61016a6101a3366004610c72565b61040c565b61013f6101b6366004610e1d565b610427565b6101746101c9366004610c26565b610439565b61011f610488565b61016a6101e4366004610d82565b610497565b61016a6101f7366004610cad565b61052d565b61011f61020a366004610e1d565b61057e565b61010261021d366004610c40565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061027c57506001600160e01b03198216635b5e139f60e01b145b8061029757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546102ac90610f4e565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f4e565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b600061033a82610610565b610357576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061037e82610427565b9050806001600160a01b0316836001600160a01b031614156103b35760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906103d357506103d1813361021d565b155b156103f1576040516367d9dca160e11b815260040160405180910390fd5b6103fc83838361063b565b505050565b6103fc8383836106af565b6103fc8383836040518060200160405280600081525061052d565b6000610432826108c4565b5192915050565b60006001600160a01b038216610462576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6060600380546102ac90610f4e565b6001600160a01b0382163314156104c15760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6105388484846106af565b6001600160a01b0383163b1515801561055a5750610558848484846109e0565b155b15610578576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061058982610610565b6105a657604051630a14c4b560e41b815260040160405180910390fd5b60006105bd60408051602081019091526000815290565b90508051600014156105de5760405180602001604052806000815250610609565b806105e884610ad8565b6040516020016105f9929190610e61565b6040516020818303038152906040525b9392505050565b6000805482108015610297575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006106ba826108c4565b80519091506000906001600160a01b0316336001600160a01b031614806106e8575081516106e8903361021d565b806107035750336106f88461032f565b6001600160a01b0316145b90508061072357604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146107585760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03841661077f57604051633a954ecd60e21b815260040160405180910390fd5b61078f600084846000015161063b565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021790925590860180835291205490911661087b5760005481101561087b578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6040805160608101825260008082526020820181905291810191909152816000548110156109c757600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906109c55780516001600160a01b03161561095b579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156109c0579392505050565b61095b565b505b604051636f96cda160e11b815260040160405180910390fd5b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610a15903390899088908890600401610e90565b602060405180830381600087803b158015610a2f57600080fd5b505af1925050508015610a5f575060408051601f3d908101601f19168201909252610a5c91810190610e01565b60015b610aba573d808015610a8d576040519150601f19603f3d011682016040523d82523d6000602084013e610a92565b606091505b508051610ab2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610afc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610b265780610b1081610f89565b9150610b1f9050600a83610ef7565b9150610b00565b60008167ffffffffffffffff811115610b4f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610b79576020820181803683370190505b5090505b8415610ad057610b8e600183610f0b565b9150610b9b600a86610fa4565b610ba6906030610edf565b60f81b818381518110610bc957634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610c03600a86610ef7565b9450610b7d565b80356001600160a01b0381168114610c2157600080fd5b919050565b600060208284031215610c37578081fd5b61060982610c0a565b60008060408385031215610c52578081fd5b610c5b83610c0a565b9150610c6960208401610c0a565b90509250929050565b600080600060608486031215610c86578081fd5b610c8f84610c0a565b9250610c9d60208501610c0a565b9150604084013590509250925092565b60008060008060808587031215610cc2578081fd5b610ccb85610c0a565b9350610cd960208601610c0a565b925060408501359150606085013567ffffffffffffffff80821115610cfc578283fd5b818701915087601f830112610d0f578283fd5b813581811115610d2157610d21610fe4565b604051601f8201601f19908116603f01168101908382118183101715610d4957610d49610fe4565b816040528281528a6020848701011115610d61578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610d94578182fd5b610d9d83610c0a565b915060208301358015158114610db1578182fd5b809150509250929050565b60008060408385031215610dce578182fd5b610dd783610c0a565b946020939093013593505050565b600060208284031215610df6578081fd5b813561060981610ffa565b600060208284031215610e12578081fd5b815161060981610ffa565b600060208284031215610e2e578081fd5b5035919050565b60008151808452610e4d816020860160208601610f22565b601f01601f19169290920160200192915050565b60008351610e73818460208801610f22565b835190830190610e87818360208801610f22565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152610ec26080830184610e35565b9695505050505050565b6020815260006106096020830184610e35565b60008219821115610ef257610ef2610fb8565b500190565b600082610f0657610f06610fce565b500490565b600082821015610f1d57610f1d610fb8565b500390565b60005b83811015610f3d578181015183820152602001610f25565b838111156105785750506000910152565b600181811c90821680610f6257607f821691505b60208210811415610f8357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610f9d57610f9d610fb8565b5060010190565b600082610fb357610fb3610fce565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461101057600080fd5b5056fea264697066735822122014c69dfc90a9cd6455c8ab56e0b378301a475337986b9b7f49bc627464d1e16d64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x12D8 CODESIZE SUB DUP1 PUSH3 0x12D8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1C5 JUMP JUMPDEST DUP2 MLOAD PUSH3 0x49 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x6C JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x5F SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x6C JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SSTORE POP PUSH3 0x27F JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x7A SWAP1 PUSH3 0x22C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x9E JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xE9 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xB9 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xE9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xE9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xE9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xCC JUMP JUMPDEST POP PUSH3 0xF7 SWAP3 SWAP2 POP PUSH3 0xFB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0xF7 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0xFC JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x123 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x140 JUMPI PUSH3 0x140 PUSH3 0x269 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x16B JUMPI PUSH3 0x16B PUSH3 0x269 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x187 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP5 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1AA JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x18B JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1BB JUMPI DUP5 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1D8 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1EF JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1FD DUP7 DUP4 DUP8 ADD PUSH3 0x112 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x213 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH3 0x222 DUP6 DUP3 DUP7 ADD PUSH3 0x112 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x241 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x263 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1049 DUP1 PUSH3 0x28F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0xDE5 JUMP JUMPDEST PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11F PUSH2 0x29D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0xECC JUMP JUMPDEST PUSH2 0x13F PUSH2 0x13A CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10E JUMP JUMPDEST PUSH2 0x16A PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0xDBC JUMP JUMPDEST PUSH2 0x373 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD SUB JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10E JUMP JUMPDEST PUSH2 0x16A PUSH2 0x190 CALLDATASIZE PUSH1 0x4 PUSH2 0xC72 JUMP JUMPDEST PUSH2 0x401 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1A3 CALLDATASIZE PUSH1 0x4 PUSH2 0xC72 JUMP JUMPDEST PUSH2 0x40C JUMP JUMPDEST PUSH2 0x13F PUSH2 0x1B6 CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x427 JUMP JUMPDEST PUSH2 0x174 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0xC26 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x488 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0xD82 JUMP JUMPDEST PUSH2 0x497 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAD JUMP JUMPDEST PUSH2 0x52D JUMP JUMPDEST PUSH2 0x11F PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x57E JUMP JUMPDEST PUSH2 0x102 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0xC40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x27C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x297 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD PUSH2 0x2AC SWAP1 PUSH2 0xF4E JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2D8 SWAP1 PUSH2 0xF4E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x325 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2FA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x325 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x308 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33A DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x357 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33D1C039 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP3 PUSH2 0x427 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x250FDEE3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x3D3 JUMPI POP PUSH2 0x3D1 DUP2 CALLER PUSH2 0x21D JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67D9DCA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH2 0x63B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x52D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x432 DUP3 PUSH2 0x8C4 JUMP JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x462 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23D3AD81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2AC SWAP1 PUSH2 0xF4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB06307DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x538 DUP5 DUP5 DUP5 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI POP PUSH2 0x558 DUP5 DUP5 DUP5 DUP5 PUSH2 0x9E0 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x589 DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x5A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA14C4B5 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5BD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x5DE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x609 JUMP JUMPDEST DUP1 PUSH2 0x5E8 DUP5 PUSH2 0xAD8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5F9 SWAP3 SWAP2 SWAP1 PUSH2 0xE61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP3 LT DUP1 ISZERO PUSH2 0x297 JUMPI POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6BA DUP3 PUSH2 0x8C4 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x6E8 JUMPI POP DUP2 MLOAD PUSH2 0x6E8 SWAP1 CALLER PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH2 0x703 JUMPI POP CALLER PUSH2 0x6F8 DUP5 PUSH2 0x32F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP1 POP DUP1 PUSH2 0x723 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CE44B5F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH3 0xA11481 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x77F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A954ECD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x78F PUSH1 0x0 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x63B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT DUP1 DUP3 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 NOT ADD DUP4 AND OR SWAP1 SWAP3 SSTORE DUP10 DUP7 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD SWAP4 DUP5 AND SWAP4 DUP4 AND PUSH1 0x1 SWAP1 DUP2 ADD DUP5 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE DUP10 DUP7 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP5 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SWAP3 SSTORE SWAP1 DUP7 ADD DUP1 DUP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 AND PUSH2 0x87B JUMPI PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0x87B JUMPI DUP3 MLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP2 DUP7 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR OR SWAP1 SSTORE JUMPDEST POP DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0x9C7 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x9C5 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x95B JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x0 NOT ADD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP3 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP4 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO PUSH2 0x9C0 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x95B JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6F96CDA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xA15 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xE90 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xA5F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0xA5C SWAP2 DUP2 ADD SWAP1 PUSH2 0xE01 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xABA JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA92 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0xAB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0xAFC JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0xB26 JUMPI DUP1 PUSH2 0xB10 DUP2 PUSH2 0xF89 JUMP JUMPDEST SWAP2 POP PUSH2 0xB1F SWAP1 POP PUSH1 0xA DUP4 PUSH2 0xEF7 JUMP JUMPDEST SWAP2 POP PUSH2 0xB00 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB4F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB79 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0xAD0 JUMPI PUSH2 0xB8E PUSH1 0x1 DUP4 PUSH2 0xF0B JUMP JUMPDEST SWAP2 POP PUSH2 0xB9B PUSH1 0xA DUP7 PUSH2 0xFA4 JUMP JUMPDEST PUSH2 0xBA6 SWAP1 PUSH1 0x30 PUSH2 0xEDF JUMP JUMPDEST PUSH1 0xF8 SHL DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xBC9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH2 0xC03 PUSH1 0xA DUP7 PUSH2 0xEF7 JUMP JUMPDEST SWAP5 POP PUSH2 0xB7D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC37 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x609 DUP3 PUSH2 0xC0A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC52 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC5B DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH2 0xC69 PUSH1 0x20 DUP5 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC86 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC8F DUP5 PUSH2 0xC0A JUMP JUMPDEST SWAP3 POP PUSH2 0xC9D PUSH1 0x20 DUP6 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xCC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xCCB DUP6 PUSH2 0xC0A JUMP JUMPDEST SWAP4 POP PUSH2 0xCD9 PUSH1 0x20 DUP7 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xCFC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD0F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xD21 JUMPI PUSH2 0xD21 PUSH2 0xFE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xD49 JUMPI PUSH2 0xD49 PUSH2 0xFE4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xD61 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP2 DUP3 ADD PUSH1 0x20 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD94 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xD9D DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB1 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDCE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xDD7 DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDF6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x609 DUP2 PUSH2 0xFFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE12 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x609 DUP2 PUSH2 0xFFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE2E JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xE4D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0xE73 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0xF22 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0xE87 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0xF22 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xEC2 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0xE35 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x609 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE35 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xEF2 JUMPI PUSH2 0xEF2 PUSH2 0xFB8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xF06 JUMPI PUSH2 0xF06 PUSH2 0xFCE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xF1D JUMPI PUSH2 0xF1D PUSH2 0xFB8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF3D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF25 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x578 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xF62 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xF83 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0xF9D JUMPI PUSH2 0xF9D PUSH2 0xFB8 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFB3 JUMPI PUSH2 0xFB3 PUSH2 0xFCE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EQ 0xC6 SWAP14 0xFC SWAP1 0xA9 0xCD PUSH5 0x55C8AB56E0 0xB3 PUSH25 0x301A475337986B9B7F49BC627464D1E16D64736F6C63430008 DIV STOP CALLER ",
              "sourceMap": "1708:20115:13:-:0;;;3600:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3666:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;3689:17:13;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;3902:7:13;3716:31;;-1:-1:-1;1708:20115:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1708:20115:13;;;-1:-1:-1;1708:20115:13;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:909:14;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;170:13;;-1:-1:-1;;;;;232:10:14;;;229:2;;;245:18;;:::i;:::-;320:2;314:9;288:2;374:13;;-1:-1:-1;;370:22:14;;;394:2;366:31;362:40;350:53;;;418:18;;;438:22;;;415:46;412:2;;;464:18;;:::i;:::-;504:10;500:2;493:22;539:2;531:6;524:18;561:4;551:14;;606:3;601:2;596;588:6;584:15;580:24;577:33;574:2;;;627:5;620;613:20;574:2;653:5;644:14;;667:133;681:2;678:1;675:9;667:133;;;769:14;;;765:23;;759:30;738:14;;;734:23;;727:63;692:10;;;;667:133;;;818:2;815:1;812:9;809:2;;;877:5;872:2;867;859:6;855:15;851:24;844:39;809:2;911:6;78:845;-1:-1:-1;;;;;;78:845:14:o;928:592::-;1027:6;1035;1088:2;1076:9;1067:7;1063:23;1059:32;1056:2;;;1109:6;1101;1094:22;1056:2;1141:16;;-1:-1:-1;;;;;1206:14:14;;;1203:2;;;1238:6;1230;1223:22;1203:2;1266:61;1319:7;1310:6;1299:9;1295:22;1266:61;:::i;:::-;1256:71;;1373:2;1362:9;1358:18;1352:25;1336:41;;1402:2;1392:8;1389:16;1386:2;;;1423:6;1415;1408:22;1386:2;;1451:63;1506:7;1495:8;1484:9;1480:24;1451:63;:::i;:::-;1441:73;;;1046:474;;;;;:::o;1525:380::-;1604:1;1600:12;;;;1647;;;1668:2;;1722:4;1714:6;1710:17;1700:27;;1668:2;1775;1767:6;1764:14;1744:18;1741:38;1738:2;;;1821:10;1816:3;1812:20;1809:1;1802:31;1856:4;1853:1;1846:15;1884:4;1881:1;1874:15;1738:2;;1580:325;;;:::o;1910:127::-;1971:10;1966:3;1962:20;1959:1;1952:31;2002:4;1999:1;1992:15;2026:4;2023:1;2016:15;1942:95;1708:20115:13;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:7486:14",
                    "statements": [
                      {
                        "nodeType": "YulBlock",
                        "src": "6:3:14",
                        "statements": []
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "63:147:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "73:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "95:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "82:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "82:20:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "73:5:14"
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "188:16:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "197:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "200:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "190:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "190:12:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "190:12:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "124:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "135:5:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "142:42:14",
                                            "type": "",
                                            "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "131:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "131:54:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "121:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "121:65:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "114:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "114:73:14"
                              },
                              "nodeType": "YulIf",
                              "src": "111:2:14"
                            }
                          ]
                        },
                        "name": "abi_decode_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "42:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "53:5:14",
                            "type": ""
                          }
                        ],
                        "src": "14:196:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "285:126:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "331:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "340:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "348:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "333:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "333:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "333:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "306:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "315:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "302:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "302:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "327:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "298:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "298:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "295:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "366:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "395:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "376:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "376:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "366:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "251:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "262:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "274:6:14",
                            "type": ""
                          }
                        ],
                        "src": "215:196:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "503:183:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "549:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "558:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "566:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "551:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "551:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "551:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "524:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "533:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "520:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "520:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "545:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "516:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "516:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "513:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "584:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "613:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "594:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "594:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "584:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "632:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "665:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "676:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "661:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "661:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "642:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "642:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "632:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_address",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "461:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "472:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "484:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "492:6:14",
                            "type": ""
                          }
                        ],
                        "src": "416:270:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "795:234:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "841:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "850:6:14"
                                        },
                                        {
                                          "name": "value2",
                                          "nodeType": "YulIdentifier",
                                          "src": "858:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "843:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "843:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "843:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "816:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "825:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "812:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "812:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "837:2:14",
                                    "type": "",
                                    "value": "96"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "808:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "808:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "805:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "876:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "905:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "886:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "886:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "876:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "924:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "957:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "968:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "953:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "953:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "934:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "934:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "924:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "981:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1008:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1019:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1004:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1004:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "991:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "991:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "981:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "745:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "756:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "768:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "776:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "784:6:14",
                            "type": ""
                          }
                        ],
                        "src": "691:338:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1164:1053:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1211:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1220:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1228:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1213:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1213:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1213:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1185:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1194:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "1181:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1181:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1206:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1177:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1177:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1174:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1246:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1275:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1256:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1256:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "1246:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1294:48:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1327:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1338:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1323:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1323:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "1304:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1304:38:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1294:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1351:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1378:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1389:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1374:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1374:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1361:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1361:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value2",
                                  "nodeType": "YulIdentifier",
                                  "src": "1351:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1402:46:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1433:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1444:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1429:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1429:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1416:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1416:32:14"
                              },
                              "variables": [
                                {
                                  "name": "offset",
                                  "nodeType": "YulTypedName",
                                  "src": "1406:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1457:28:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1467:18:14",
                                "type": "",
                                "value": "0xffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "1461:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1512:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1521:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1529:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1514:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1514:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1514:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1500:6:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1508:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1497:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1497:14:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1494:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1547:32:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1561:9:14"
                                  },
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "1572:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1557:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1557:22:14"
                              },
                              "variables": [
                                {
                                  "name": "_2",
                                  "nodeType": "YulTypedName",
                                  "src": "1551:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1627:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1636:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "1644:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "1629:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1629:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1629:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "1606:2:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1610:4:14",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1602:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1602:13:14"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "1617:7:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1598:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1598:27:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "1591:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1591:35:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1588:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1662:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "_2",
                                    "nodeType": "YulIdentifier",
                                    "src": "1685:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1672:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1672:16:14"
                              },
                              "variables": [
                                {
                                  "name": "_3",
                                  "nodeType": "YulTypedName",
                                  "src": "1666:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1711:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1713:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1713:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1713:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "1703:2:14"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "1707:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1700:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1700:10:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1697:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1742:17:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1756:2:14",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1752:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1752:7:14"
                              },
                              "variables": [
                                {
                                  "name": "_4",
                                  "nodeType": "YulTypedName",
                                  "src": "1746:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1768:23:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1788:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1782:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1782:9:14"
                              },
                              "variables": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1772:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1800:71:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1822:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "_3",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1846:2:14"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1850:4:14",
                                                    "type": "",
                                                    "value": "0x1f"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1842:3:14"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1842:13:14"
                                              },
                                              {
                                                "name": "_4",
                                                "nodeType": "YulIdentifier",
                                                "src": "1857:2:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "1838:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1838:22:14"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1862:2:14",
                                            "type": "",
                                            "value": "63"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "1834:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "1834:31:14"
                                      },
                                      {
                                        "name": "_4",
                                        "nodeType": "YulIdentifier",
                                        "src": "1867:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "1830:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1830:40:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1818:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1818:53:14"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1804:10:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1930:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1932:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1932:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1932:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1889:10:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "1901:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1886:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1886:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1909:10:14"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1921:6:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "1906:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1906:22:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "1883:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1883:46:14"
                              },
                              "nodeType": "YulIf",
                              "src": "1880:2:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1968:2:14",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1972:10:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1961:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1961:22:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1961:22:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1999:6:14"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2007:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1992:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1992:18:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1992:18:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2056:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2065:6:14"
                                        },
                                        {
                                          "name": "value3",
                                          "nodeType": "YulIdentifier",
                                          "src": "2073:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2058:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2058:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2058:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "_2",
                                            "nodeType": "YulIdentifier",
                                            "src": "2033:2:14"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2037:2:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2029:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2029:11:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2042:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2025:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2025:20:14"
                                  },
                                  {
                                    "name": "dataEnd",
                                    "nodeType": "YulIdentifier",
                                    "src": "2047:7:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2022:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2022:33:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2019:2:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2108:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2116:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2104:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2104:15:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "2125:2:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2129:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2121:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2121:11:14"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2134:2:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "2091:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2091:46:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2091:46:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "memPtr",
                                            "nodeType": "YulIdentifier",
                                            "src": "2161:6:14"
                                          },
                                          {
                                            "name": "_3",
                                            "nodeType": "YulIdentifier",
                                            "src": "2169:2:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "2157:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2157:15:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2174:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2153:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2153:24:14"
                                  },
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2179:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2146:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2146:40:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2146:40:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2195:16:14",
                              "value": {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "2205:6:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value3",
                                  "nodeType": "YulIdentifier",
                                  "src": "2195:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1106:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "1117:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1129:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "1137:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "1145:6:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "1153:6:14",
                            "type": ""
                          }
                        ],
                        "src": "1034:1183:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2306:283:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2352:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2361:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2369:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2354:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2354:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2354:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2327:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2336:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2323:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2323:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2348:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2319:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2319:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2316:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2387:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2416:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2397:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2397:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2387:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2435:45:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2465:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2476:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2461:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2461:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2448:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2448:32:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "2439:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2533:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2542:6:14"
                                        },
                                        {
                                          "name": "value1",
                                          "nodeType": "YulIdentifier",
                                          "src": "2550:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2535:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2535:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2535:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2502:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "value",
                                                "nodeType": "YulIdentifier",
                                                "src": "2523:5:14"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "iszero",
                                              "nodeType": "YulIdentifier",
                                              "src": "2516:6:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2516:13:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "2509:6:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "2509:21:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "2499:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2499:32:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "2492:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2492:40:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2489:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2568:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "2578:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2568:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_bool",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2264:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2275:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2287:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2295:6:14",
                            "type": ""
                          }
                        ],
                        "src": "2222:367:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2681:177:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2727:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2736:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2744:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2729:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2729:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2729:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2702:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2711:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2698:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2698:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2723:2:14",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2694:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2694:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2691:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2762:39:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "2791:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_address",
                                  "nodeType": "YulIdentifier",
                                  "src": "2772:18:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2772:29:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2762:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "2810:42:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2837:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2848:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2833:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2833:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2820:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2820:32:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value1",
                                  "nodeType": "YulIdentifier",
                                  "src": "2810:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_addresst_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2639:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2650:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2662:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "2670:6:14",
                            "type": ""
                          }
                        ],
                        "src": "2594:264:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2932:186:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2978:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2987:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "2995:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "2980:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2980:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2980:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "2953:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "2962:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "2949:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2949:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2974:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "2945:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2945:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "2942:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3013:36:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3039:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3026:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3026:23:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3017:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3082:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3058:23:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3058:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3058:30:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3097:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3107:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3097:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "2898:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "2909:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "2921:6:14",
                            "type": ""
                          }
                        ],
                        "src": "2863:255:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3203:179:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3249:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3258:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3266:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3251:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3251:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3251:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3224:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3233:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3220:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3220:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3245:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3216:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3216:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3213:2:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3284:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3303:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3297:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3297:16:14"
                              },
                              "variables": [
                                {
                                  "name": "value",
                                  "nodeType": "YulTypedName",
                                  "src": "3288:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3346:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "validator_revert_bytes4",
                                  "nodeType": "YulIdentifier",
                                  "src": "3322:23:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3322:30:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3322:30:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3361:15:14",
                              "value": {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3371:5:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3361:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes4_fromMemory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3169:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3180:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3192:6:14",
                            "type": ""
                          }
                        ],
                        "src": "3123:259:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3457:120:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3503:26:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3512:6:14"
                                        },
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3520:6:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "3505:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3505:22:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "3505:22:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "3478:7:14"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "3487:9:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "3474:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3474:23:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3499:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3470:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3470:32:14"
                              },
                              "nodeType": "YulIf",
                              "src": "3467:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3538:33:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "3561:9:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3548:12:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3548:23:14"
                              },
                              "variableNames": [
                                {
                                  "name": "value0",
                                  "nodeType": "YulIdentifier",
                                  "src": "3538:6:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "3423:9:14",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "3434:7:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "3446:6:14",
                            "type": ""
                          }
                        ],
                        "src": "3387:190:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "3631:208:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3641:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "3661:5:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3655:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3655:12:14"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "3645:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "3683:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3688:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3676:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3676:19:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3676:19:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "3730:5:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3737:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3726:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3726:16:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3748:3:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3753:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3744:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3744:14:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3760:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "3704:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3704:63:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3704:63:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3776:57:14",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "pos",
                                        "nodeType": "YulIdentifier",
                                        "src": "3791:3:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "length",
                                                "nodeType": "YulIdentifier",
                                                "src": "3804:6:14"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3812:2:14",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "3800:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3800:15:14"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3821:2:14",
                                                "type": "",
                                                "value": "31"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "3817:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3817:7:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "3796:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3796:29:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3787:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3787:39:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3828:4:14",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3783:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3783:50:14"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "3776:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_bytes",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "3608:5:14",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3615:3:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "3623:3:14",
                            "type": ""
                          }
                        ],
                        "src": "3582:257:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4031:283:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4041:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "4061:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4055:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4055:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "4045:6:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4103:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4111:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4099:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4099:17:14"
                                  },
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4118:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4123:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4077:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4077:53:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4077:53:14"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4139:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "4156:3:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4161:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4152:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4152:16:14"
                              },
                              "variables": [
                                {
                                  "name": "end_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4143:5:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4177:29:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4199:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4193:5:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4193:13:14"
                              },
                              "variables": [
                                {
                                  "name": "length_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4181:8:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4241:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4249:4:14",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4237:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4237:17:14"
                                  },
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4256:5:14"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4263:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_memory_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "4215:21:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4215:57:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4215:57:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "4281:27:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "end_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4292:5:14"
                                  },
                                  {
                                    "name": "length_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "4299:8:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4288:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4288:20:14"
                              },
                              "variableNames": [
                                {
                                  "name": "end",
                                  "nodeType": "YulIdentifier",
                                  "src": "4281:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "3999:3:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4004:6:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4012:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "4023:3:14",
                            "type": ""
                          }
                        ],
                        "src": "3844:470:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4420:125:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4430:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4442:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4453:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4438:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4438:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "4430:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4472:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4487:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4495:42:14",
                                        "type": "",
                                        "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4483:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4483:55:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4465:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4465:74:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4465:74:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4389:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4400:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4411:4:14",
                            "type": ""
                          }
                        ],
                        "src": "4319:226:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "4753:308:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "4763:52:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4773:42:14",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                              },
                              "variables": [
                                {
                                  "name": "_1",
                                  "nodeType": "YulTypedName",
                                  "src": "4767:2:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "4831:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value0",
                                        "nodeType": "YulIdentifier",
                                        "src": "4846:6:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4854:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4842:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4842:15:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4824:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4824:34:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4824:34:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4878:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4889:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4874:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4874:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4898:6:14"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "4906:2:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "4894:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4894:15:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4867:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4867:43:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4867:43:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4930:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4941:2:14",
                                        "type": "",
                                        "value": "64"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4926:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4926:18:14"
                                  },
                                  {
                                    "name": "value2",
                                    "nodeType": "YulIdentifier",
                                    "src": "4946:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4919:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4919:34:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4919:34:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "4973:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "4984:2:14",
                                        "type": "",
                                        "value": "96"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4969:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4969:18:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4989:3:14",
                                    "type": "",
                                    "value": "128"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "4962:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4962:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "4962:31:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5002:53:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "5027:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5039:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5050:3:14",
                                        "type": "",
                                        "value": "128"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5035:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5035:19:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5010:16:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5010:45:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5002:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "4698:9:14",
                            "type": ""
                          },
                          {
                            "name": "value3",
                            "nodeType": "YulTypedName",
                            "src": "4709:6:14",
                            "type": ""
                          },
                          {
                            "name": "value2",
                            "nodeType": "YulTypedName",
                            "src": "4717:6:14",
                            "type": ""
                          },
                          {
                            "name": "value1",
                            "nodeType": "YulTypedName",
                            "src": "4725:6:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "4733:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "4744:4:14",
                            "type": ""
                          }
                        ],
                        "src": "4550:511:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5161:92:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5171:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5183:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5194:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5179:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5179:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5171:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5213:9:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "value0",
                                            "nodeType": "YulIdentifier",
                                            "src": "5238:6:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nodeType": "YulIdentifier",
                                          "src": "5231:6:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5231:14:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nodeType": "YulIdentifier",
                                      "src": "5224:6:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5224:22:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5206:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5206:41:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5206:41:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5130:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5141:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5152:4:14",
                            "type": ""
                          }
                        ],
                        "src": "5066:187:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5379:98:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5396:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5407:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5389:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5389:21:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5389:21:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5419:52:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5444:6:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "5456:9:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "5467:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "5452:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5452:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_bytes",
                                  "nodeType": "YulIdentifier",
                                  "src": "5427:16:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5427:44:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5419:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5348:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5359:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5370:4:14",
                            "type": ""
                          }
                        ],
                        "src": "5258:219:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5583:76:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "5593:26:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5605:9:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5616:2:14",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5601:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5601:18:14"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "5593:4:14"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "5635:9:14"
                                  },
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5646:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "5628:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5628:25:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "5628:25:14"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "5552:9:14",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "5563:6:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "5574:4:14",
                            "type": ""
                          }
                        ],
                        "src": "5482:177:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5712:80:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5739:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5741:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5741:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5741:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5728:1:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "y",
                                        "nodeType": "YulIdentifier",
                                        "src": "5735:1:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "5731:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5731:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5725:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5725:13:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5722:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5770:16:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5781:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5784:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5777:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5777:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "sum",
                                  "nodeType": "YulIdentifier",
                                  "src": "5770:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_add_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5695:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5698:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "sum",
                            "nodeType": "YulTypedName",
                            "src": "5704:3:14",
                            "type": ""
                          }
                        ],
                        "src": "5664:128:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5843:74:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5866:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "5868:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5868:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5868:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5863:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "5856:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5856:9:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5853:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5897:14:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5906:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5909:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "div",
                                  "nodeType": "YulIdentifier",
                                  "src": "5902:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5902:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "5897:1:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_div_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5828:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5831:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "5837:1:14",
                            "type": ""
                          }
                        ],
                        "src": "5797:120:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "5971:76:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "5993:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "5995:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5995:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5995:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "5987:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "5990:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "5984:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5984:8:14"
                              },
                              "nodeType": "YulIf",
                              "src": "5981:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6024:17:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6036:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6039:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "6032:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6032:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "diff",
                                  "nodeType": "YulIdentifier",
                                  "src": "6024:4:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "checked_sub_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "5953:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "5956:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "diff",
                            "nodeType": "YulTypedName",
                            "src": "5962:4:14",
                            "type": ""
                          }
                        ],
                        "src": "5922:125:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6105:205:14",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6115:10:14",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6124:1:14",
                                "type": "",
                                "value": "0"
                              },
                              "variables": [
                                {
                                  "name": "i",
                                  "nodeType": "YulTypedName",
                                  "src": "6119:1:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6184:63:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6209:3:14"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "6214:1:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6205:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6205:11:14"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "src",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6228:3:14"
                                                },
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "6233:1:14"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "6224:3:14"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "6224:11:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "6218:5:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6218:18:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6198:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6198:39:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6198:39:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6145:1:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6148:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6142:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6142:13:14"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "6156:19:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6158:15:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "6167:1:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6170:2:14",
                                          "type": "",
                                          "value": "32"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "6163:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6163:10:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "6158:1:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "6138:3:14",
                                "statements": []
                              },
                              "src": "6134:113:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6273:31:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "dst",
                                              "nodeType": "YulIdentifier",
                                              "src": "6286:3:14"
                                            },
                                            {
                                              "name": "length",
                                              "nodeType": "YulIdentifier",
                                              "src": "6291:6:14"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "6282:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6282:16:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6300:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6275:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6275:27:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6275:27:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "6262:1:14"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "6265:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "6259:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6259:13:14"
                              },
                              "nodeType": "YulIf",
                              "src": "6256:2:14"
                            }
                          ]
                        },
                        "name": "copy_memory_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "6083:3:14",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "6088:3:14",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6093:6:14",
                            "type": ""
                          }
                        ],
                        "src": "6052:258:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6370:325:14",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6380:22:14",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6394:1:14",
                                    "type": "",
                                    "value": "1"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6397:4:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "6390:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6390:12:14"
                              },
                              "variableNames": [
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "6380:6:14"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "6411:38:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "6441:4:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6447:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6437:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6437:12:14"
                              },
                              "variables": [
                                {
                                  "name": "outOfPlaceEncoding",
                                  "nodeType": "YulTypedName",
                                  "src": "6415:18:14",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6488:31:14",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "6490:27:14",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "length",
                                          "nodeType": "YulIdentifier",
                                          "src": "6504:6:14"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6512:4:14",
                                          "type": "",
                                          "value": "0x7f"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "6500:3:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6500:17:14"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "6490:6:14"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "6468:18:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6461:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6461:26:14"
                              },
                              "nodeType": "YulIf",
                              "src": "6458:2:14"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6578:111:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6599:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6606:3:14",
                                              "type": "",
                                              "value": "224"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "6611:10:14",
                                              "type": "",
                                              "value": "0x4e487b71"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "6602:3:14"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "6602:20:14"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6592:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6592:31:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6592:31:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6643:1:14",
                                          "type": "",
                                          "value": "4"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6646:4:14",
                                          "type": "",
                                          "value": "0x22"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "6636:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6636:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6636:15:14"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6671:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "6674:4:14",
                                          "type": "",
                                          "value": "0x24"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "6664:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6664:15:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6664:15:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "outOfPlaceEncoding",
                                    "nodeType": "YulIdentifier",
                                    "src": "6534:18:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "6557:6:14"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6565:2:14",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "6554:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6554:14:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "6531:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6531:38:14"
                              },
                              "nodeType": "YulIf",
                              "src": "6528:2:14"
                            }
                          ]
                        },
                        "name": "extract_byte_array_length",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "6350:4:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "6359:6:14",
                            "type": ""
                          }
                        ],
                        "src": "6315:380:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6747:88:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6778:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x11",
                                        "nodeType": "YulIdentifier",
                                        "src": "6780:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6780:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6780:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6763:5:14"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "6774:1:14",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "6770:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6770:6:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "6760:2:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6760:17:14"
                              },
                              "nodeType": "YulIf",
                              "src": "6757:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6809:20:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6820:5:14"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6827:1:14",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "6816:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6816:13:14"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "6809:3:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "increment_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "6729:5:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "ret",
                            "nodeType": "YulTypedName",
                            "src": "6739:3:14",
                            "type": ""
                          }
                        ],
                        "src": "6700:135:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6878:74:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "6901:22:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x12",
                                        "nodeType": "YulIdentifier",
                                        "src": "6903:16:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "6903:18:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "6903:18:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6898:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6891:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6891:9:14"
                              },
                              "nodeType": "YulIf",
                              "src": "6888:2:14"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "6932:14:14",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "x",
                                    "nodeType": "YulIdentifier",
                                    "src": "6941:1:14"
                                  },
                                  {
                                    "name": "y",
                                    "nodeType": "YulIdentifier",
                                    "src": "6944:1:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "6937:3:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6937:9:14"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nodeType": "YulIdentifier",
                                  "src": "6932:1:14"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "mod_t_uint256",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "x",
                            "nodeType": "YulTypedName",
                            "src": "6863:1:14",
                            "type": ""
                          },
                          {
                            "name": "y",
                            "nodeType": "YulTypedName",
                            "src": "6866:1:14",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "r",
                            "nodeType": "YulTypedName",
                            "src": "6872:1:14",
                            "type": ""
                          }
                        ],
                        "src": "6840:112:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "6989:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7006:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7013:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7018:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7009:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7009:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "6999:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6999:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "6999:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7046:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7049:4:14",
                                    "type": "",
                                    "value": "0x11"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7039:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7039:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7039:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7070:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7073:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7063:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7063:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7063:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x11",
                        "nodeType": "YulFunctionDefinition",
                        "src": "6957:127:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7121:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7138:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7145:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7150:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7141:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7141:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7131:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7131:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7131:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7178:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7181:4:14",
                                    "type": "",
                                    "value": "0x12"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7171:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7171:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7171:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7202:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7205:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7195:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7195:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7195:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x12",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7089:127:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7253:95:14",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7270:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7277:3:14",
                                        "type": "",
                                        "value": "224"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "7282:10:14",
                                        "type": "",
                                        "value": "0x4e487b71"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "7273:3:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7273:20:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7263:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7263:31:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7263:31:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7310:1:14",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7313:4:14",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "7303:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7303:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7303:15:14"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7334:1:14",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "7337:4:14",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "7327:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7327:15:14"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "7327:15:14"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "7221:127:14"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "7397:87:14",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "7462:16:14",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7471:1:14",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "7474:1:14",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "7464:6:14"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "7464:12:14"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "7464:12:14"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "7420:5:14"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "value",
                                            "nodeType": "YulIdentifier",
                                            "src": "7431:5:14"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7442:3:14",
                                                "type": "",
                                                "value": "224"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "7447:10:14",
                                                "type": "",
                                                "value": "0xffffffff"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shl",
                                              "nodeType": "YulIdentifier",
                                              "src": "7438:3:14"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "7438:20:14"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "7427:3:14"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "7427:32:14"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "eq",
                                      "nodeType": "YulIdentifier",
                                      "src": "7417:2:14"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "7417:43:14"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "7410:6:14"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7410:51:14"
                              },
                              "nodeType": "YulIf",
                              "src": "7407:2:14"
                            }
                          ]
                        },
                        "name": "validator_revert_bytes4",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "7386:5:14",
                            "type": ""
                          }
                        ],
                        "src": "7353:131:14"
                      }
                    ]
                  },
                  "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value1, value1) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(value3, value3) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(value3, value3) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value3, value3) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(value3, value3) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), value3)\n        value3 := memPtr\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, iszero(iszero(value)))) { revert(value1, value1) }\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := calldataload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bytes4_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        validator_revert_bytes4(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        let end_1 := add(pos, length)\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), end_1, length_1)\n        end := add(end_1, length_1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_bytes_memory_ptr__to_t_address_t_address_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), 128)\n        tail := abi_encode_bytes(value3, add(headStart, 128))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function validator_revert_bytes4(value)\n    {\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n    }\n}",
                  "id": 14,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101d6578063b88d4fde146101e9578063c87b56dd146101fc578063e985e9c51461020f57600080fd5b80636352211e146101a857806370a08231146101bb57806395d89b41146101ce57600080fd5b8063095ea7b3116100c8578063095ea7b31461015757806318160ddd1461016c57806323b872dd1461018257806342842e0e1461019557600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd366004610de5565b61024b565b60405190151581526020015b60405180910390f35b61011f61029d565b60405161010e9190610ecc565b61013f61013a366004610e1d565b61032f565b6040516001600160a01b03909116815260200161010e565b61016a610165366004610dbc565b610373565b005b600154600054035b60405190815260200161010e565b61016a610190366004610c72565b610401565b61016a6101a3366004610c72565b61040c565b61013f6101b6366004610e1d565b610427565b6101746101c9366004610c26565b610439565b61011f610488565b61016a6101e4366004610d82565b610497565b61016a6101f7366004610cad565b61052d565b61011f61020a366004610e1d565b61057e565b61010261021d366004610c40565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061027c57506001600160e01b03198216635b5e139f60e01b145b8061029757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546102ac90610f4e565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890610f4e565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b600061033a82610610565b610357576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061037e82610427565b9050806001600160a01b0316836001600160a01b031614156103b35760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906103d357506103d1813361021d565b155b156103f1576040516367d9dca160e11b815260040160405180910390fd5b6103fc83838361063b565b505050565b6103fc8383836106af565b6103fc8383836040518060200160405280600081525061052d565b6000610432826108c4565b5192915050565b60006001600160a01b038216610462576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6060600380546102ac90610f4e565b6001600160a01b0382163314156104c15760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6105388484846106af565b6001600160a01b0383163b1515801561055a5750610558848484846109e0565b155b15610578576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061058982610610565b6105a657604051630a14c4b560e41b815260040160405180910390fd5b60006105bd60408051602081019091526000815290565b90508051600014156105de5760405180602001604052806000815250610609565b806105e884610ad8565b6040516020016105f9929190610e61565b6040516020818303038152906040525b9392505050565b6000805482108015610297575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006106ba826108c4565b80519091506000906001600160a01b0316336001600160a01b031614806106e8575081516106e8903361021d565b806107035750336106f88461032f565b6001600160a01b0316145b90508061072357604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146107585760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03841661077f57604051633a954ecd60e21b815260040160405180910390fd5b61078f600084846000015161063b565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021790925590860180835291205490911661087b5760005481101561087b578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6040805160608101825260008082526020820181905291810191909152816000548110156109c757600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906109c55780516001600160a01b03161561095b579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156109c0579392505050565b61095b565b505b604051636f96cda160e11b815260040160405180910390fd5b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610a15903390899088908890600401610e90565b602060405180830381600087803b158015610a2f57600080fd5b505af1925050508015610a5f575060408051601f3d908101601f19168201909252610a5c91810190610e01565b60015b610aba573d808015610a8d576040519150601f19603f3d011682016040523d82523d6000602084013e610a92565b606091505b508051610ab2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610afc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610b265780610b1081610f89565b9150610b1f9050600a83610ef7565b9150610b00565b60008167ffffffffffffffff811115610b4f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610b79576020820181803683370190505b5090505b8415610ad057610b8e600183610f0b565b9150610b9b600a86610fa4565b610ba6906030610edf565b60f81b818381518110610bc957634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610c03600a86610ef7565b9450610b7d565b80356001600160a01b0381168114610c2157600080fd5b919050565b600060208284031215610c37578081fd5b61060982610c0a565b60008060408385031215610c52578081fd5b610c5b83610c0a565b9150610c6960208401610c0a565b90509250929050565b600080600060608486031215610c86578081fd5b610c8f84610c0a565b9250610c9d60208501610c0a565b9150604084013590509250925092565b60008060008060808587031215610cc2578081fd5b610ccb85610c0a565b9350610cd960208601610c0a565b925060408501359150606085013567ffffffffffffffff80821115610cfc578283fd5b818701915087601f830112610d0f578283fd5b813581811115610d2157610d21610fe4565b604051601f8201601f19908116603f01168101908382118183101715610d4957610d49610fe4565b816040528281528a6020848701011115610d61578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215610d94578182fd5b610d9d83610c0a565b915060208301358015158114610db1578182fd5b809150509250929050565b60008060408385031215610dce578182fd5b610dd783610c0a565b946020939093013593505050565b600060208284031215610df6578081fd5b813561060981610ffa565b600060208284031215610e12578081fd5b815161060981610ffa565b600060208284031215610e2e578081fd5b5035919050565b60008151808452610e4d816020860160208601610f22565b601f01601f19169290920160200192915050565b60008351610e73818460208801610f22565b835190830190610e87818360208801610f22565b01949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152610ec26080830184610e35565b9695505050505050565b6020815260006106096020830184610e35565b60008219821115610ef257610ef2610fb8565b500190565b600082610f0657610f06610fce565b500490565b600082821015610f1d57610f1d610fb8565b500390565b60005b83811015610f3d578181015183820152602001610f25565b838111156105785750506000910152565b600181811c90821680610f6257607f821691505b60208210811415610f8357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415610f9d57610f9d610fb8565b5060010190565b600082610fb357610fb3610fce565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461101057600080fd5b5056fea264697066735822122014c69dfc90a9cd6455c8ab56e0b378301a475337986b9b7f49bc627464d1e16d64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6352211E GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA22CB465 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0xB88D4FDE EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xC87B56DD EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x20F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6352211E EQ PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x42842E0E EQ PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x81812FC EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0xDE5 JUMP JUMPDEST PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11F PUSH2 0x29D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0xECC JUMP JUMPDEST PUSH2 0x13F PUSH2 0x13A CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10E JUMP JUMPDEST PUSH2 0x16A PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0xDBC JUMP JUMPDEST PUSH2 0x373 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SLOAD SUB JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10E JUMP JUMPDEST PUSH2 0x16A PUSH2 0x190 CALLDATASIZE PUSH1 0x4 PUSH2 0xC72 JUMP JUMPDEST PUSH2 0x401 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1A3 CALLDATASIZE PUSH1 0x4 PUSH2 0xC72 JUMP JUMPDEST PUSH2 0x40C JUMP JUMPDEST PUSH2 0x13F PUSH2 0x1B6 CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x427 JUMP JUMPDEST PUSH2 0x174 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0xC26 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x488 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0xD82 JUMP JUMPDEST PUSH2 0x497 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0xCAD JUMP JUMPDEST PUSH2 0x52D JUMP JUMPDEST PUSH2 0x11F PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0xE1D JUMP JUMPDEST PUSH2 0x57E JUMP JUMPDEST PUSH2 0x102 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0xC40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x80AC58CD PUSH1 0xE0 SHL EQ DUP1 PUSH2 0x27C JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH4 0x5B5E139F PUSH1 0xE0 SHL EQ JUMPDEST DUP1 PUSH2 0x297 JUMPI POP PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD PUSH2 0x2AC SWAP1 PUSH2 0xF4E JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2D8 SWAP1 PUSH2 0xF4E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x325 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2FA JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x325 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x308 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33A DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x357 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33D1C039 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E DUP3 PUSH2 0x427 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x3B3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x250FDEE3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x3D3 JUMPI POP PUSH2 0x3D1 DUP2 CALLER PUSH2 0x21D JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x3F1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67D9DCA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH2 0x63B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH2 0x6AF JUMP JUMPDEST PUSH2 0x3FC DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x52D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x432 DUP3 PUSH2 0x8C4 JUMP JUMPDEST MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x462 JUMPI PUSH1 0x40 MLOAD PUSH4 0x23D3AD81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2AC SWAP1 PUSH2 0xF4E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER EQ ISZERO PUSH2 0x4C1 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB06307DB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x538 DUP5 DUP5 DUP5 PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI POP PUSH2 0x558 DUP5 DUP5 DUP5 DUP5 PUSH2 0x9E0 JUMP JUMPDEST ISZERO JUMPDEST ISZERO PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x589 DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH2 0x5A6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xA14C4B5 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x5BD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x5DE JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x609 JUMP JUMPDEST DUP1 PUSH2 0x5E8 DUP5 PUSH2 0xAD8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5F9 SWAP3 SWAP2 SWAP1 PUSH2 0xE61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD DUP3 LT DUP1 ISZERO PUSH2 0x297 JUMPI POP POP PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD DUP6 SWAP4 SWAP2 DUP6 AND SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6BA DUP3 PUSH2 0x8C4 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x6E8 JUMPI POP DUP2 MLOAD PUSH2 0x6E8 SWAP1 CALLER PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH2 0x703 JUMPI POP CALLER PUSH2 0x6F8 DUP5 PUSH2 0x32F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP1 POP DUP1 PUSH2 0x723 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2CE44B5F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH3 0xA11481 PUSH1 0xE8 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x77F JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A954ECD PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x78F PUSH1 0x0 DUP5 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x63B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF NOT DUP1 DUP3 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 NOT ADD DUP4 AND OR SWAP1 SWAP3 SSTORE DUP10 DUP7 AND DUP1 DUP7 MSTORE DUP4 DUP7 KECCAK256 DUP1 SLOAD SWAP4 DUP5 AND SWAP4 DUP4 AND PUSH1 0x1 SWAP1 DUP2 ADD DUP5 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE DUP10 DUP7 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP6 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND SWAP1 SWAP5 OR PUSH1 0x1 PUSH1 0xA0 SHL TIMESTAMP SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SWAP3 SSTORE SWAP1 DUP7 ADD DUP1 DUP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 AND PUSH2 0x87B JUMPI PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0x87B JUMPI DUP3 MLOAD PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD SWAP2 DUP7 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0xA0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR OR SWAP1 SSTORE JUMPDEST POP DUP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 PUSH1 0x0 SLOAD DUP2 LT ISZERO PUSH2 0x9C7 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP2 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 SWAP2 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 PUSH2 0x9C5 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x95B JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP PUSH1 0x0 NOT ADD PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x1 PUSH1 0xA0 SHL DUP3 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP4 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0xE0 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO PUSH2 0x9C0 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x95B JUMP JUMPDEST POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6F96CDA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA85BD01 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x150B7A02 SWAP1 PUSH2 0xA15 SWAP1 CALLER SWAP1 DUP10 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0xE90 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0xA5F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0xA5C SWAP2 DUP2 ADD SWAP1 PUSH2 0xE01 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0xABA JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0xA8D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA92 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP DUP1 MLOAD PUSH2 0xAB2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x68D2BF6B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 MLOAD DUP2 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND PUSH4 0xA85BD01 PUSH1 0xE1 SHL EQ SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 PUSH2 0xAFC JUMPI POP POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x3 PUSH1 0xFC SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0xB26 JUMPI DUP1 PUSH2 0xB10 DUP2 PUSH2 0xF89 JUMP JUMPDEST SWAP2 POP PUSH2 0xB1F SWAP1 POP PUSH1 0xA DUP4 PUSH2 0xEF7 JUMP JUMPDEST SWAP2 POP PUSH2 0xB00 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB4F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB79 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP JUMPDEST DUP5 ISZERO PUSH2 0xAD0 JUMPI PUSH2 0xB8E PUSH1 0x1 DUP4 PUSH2 0xF0B JUMP JUMPDEST SWAP2 POP PUSH2 0xB9B PUSH1 0xA DUP7 PUSH2 0xFA4 JUMP JUMPDEST PUSH2 0xBA6 SWAP1 PUSH1 0x30 PUSH2 0xEDF JUMP JUMPDEST PUSH1 0xF8 SHL DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xBC9 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH2 0xC03 PUSH1 0xA DUP7 PUSH2 0xEF7 JUMP JUMPDEST SWAP5 POP PUSH2 0xB7D JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xC21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC37 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x609 DUP3 PUSH2 0xC0A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC52 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC5B DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH2 0xC69 PUSH1 0x20 DUP5 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xC86 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xC8F DUP5 PUSH2 0xC0A JUMP JUMPDEST SWAP3 POP PUSH2 0xC9D PUSH1 0x20 DUP6 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xCC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0xCCB DUP6 PUSH2 0xC0A JUMP JUMPDEST SWAP4 POP PUSH2 0xCD9 PUSH1 0x20 DUP7 ADD PUSH2 0xC0A JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xCFC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xD0F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xD21 JUMPI PUSH2 0xD21 PUSH2 0xFE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xD49 JUMPI PUSH2 0xD49 PUSH2 0xFE4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xD61 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY SWAP2 DUP3 ADD PUSH1 0x20 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD94 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xD9D DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB1 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDCE JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xDD7 DUP4 PUSH2 0xC0A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDF6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x609 DUP2 PUSH2 0xFFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE12 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x609 DUP2 PUSH2 0xFFA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE2E JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0xE4D DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 MLOAD PUSH2 0xE73 DUP2 DUP5 PUSH1 0x20 DUP9 ADD PUSH2 0xF22 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP4 ADD SWAP1 PUSH2 0xE87 DUP2 DUP4 PUSH1 0x20 DUP9 ADD PUSH2 0xF22 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xEC2 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0xE35 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x609 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xE35 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xEF2 JUMPI PUSH2 0xEF2 PUSH2 0xFB8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xF06 JUMPI PUSH2 0xF06 PUSH2 0xFCE JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xF1D JUMPI PUSH2 0xF1D PUSH2 0xFB8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF3D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF25 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x578 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xF62 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xF83 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH2 0xF9D JUMPI PUSH2 0xF9D PUSH2 0xFB8 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xFB3 JUMPI PUSH2 0xFB3 PUSH2 0xFCE JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0x1010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EQ 0xC6 SWAP14 0xFC SWAP1 0xA9 0xCD PUSH5 0x55C8AB56E0 0xB3 PUSH25 0x301A475337986B9B7F49BC627464D1E16D64736F6C63430008 DIV STOP CALLER ",
              "sourceMap": "1708:20115:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4843:300;;;;;;:::i;:::-;;:::i;:::-;;;5231:14:14;;5224:22;5206:41;;5194:2;5179:18;4843:300:13;;;;;;;;8139:98;;;:::i;:::-;;;;;;;:::i;9595:200::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4483:55:14;;;4465:74;;4453:2;4438:18;9595:200:13;4420:125:14;9172:362:13;;;;;;:::i;:::-;;:::i;:::-;;4114:297;4364:12;;4158:7;4348:13;:28;4114:297;;;5628:25:14;;;5616:2;5601:18;4114:297:13;5583:76:14;10426:164:13;;;;;;:::i;:::-;;:::i;10656:179::-;;;;;;:::i;:::-;;:::i;7955:122::-;;;;;;:::i;:::-;;:::i;5202:203::-;;;;;;:::i;:::-;;:::i;8301:102::-;;;:::i;9862:274::-;;;;;;:::i;:::-;;:::i;10901:359::-;;;;;;:::i;:::-;;:::i;8469:313::-;;;;;;:::i;:::-;;:::i;10202:162::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10322:25:13;;;10299:4;10322:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10202:162;4843:300;4945:4;-1:-1:-1;;;;;;4980:40:13;;-1:-1:-1;;;4980:40:13;;:104;;-1:-1:-1;;;;;;;5036:48:13;;-1:-1:-1;;;5036:48:13;4980:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:8;;;5100:36:13;4961:175;4843:300;-1:-1:-1;;4843:300:13:o;8139:98::-;8193:13;8225:5;8218:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:98;:::o;9595:200::-;9663:7;9687:16;9695:7;9687;:16::i;:::-;9682:64;;9712:34;;-1:-1:-1;;;9712:34:13;;;;;;;;;;;9682:64;-1:-1:-1;9764:24:13;;;;:15;:24;;;;;;-1:-1:-1;;;;;9764:24:13;;9595:200::o;9172:362::-;9244:13;9260:24;9276:7;9260:15;:24::i;:::-;9244:40;;9304:5;-1:-1:-1;;;;;9298:11:13;:2;-1:-1:-1;;;;;9298:11:13;;9294:48;;;9318:24;;-1:-1:-1;;;9318:24:13;;;;;;;;;;;9294:48;719:10:6;-1:-1:-1;;;;;9357:21:13;;;;;;:63;;-1:-1:-1;9383:37:13;9400:5;719:10:6;10202:162:13;:::i;9383:37::-;9382:38;9357:63;9353:136;;;9443:35;;-1:-1:-1;;;9443:35:13;;;;;;;;;;;9353:136;9499:28;9508:2;9512:7;9521:5;9499:8;:28::i;:::-;9172:362;;;:::o;10426:164::-;10555:28;10565:4;10571:2;10575:7;10555:9;:28::i;10656:179::-;10789:39;10806:4;10812:2;10816:7;10789:39;;;;;;;;;;;;:16;:39::i;7955:122::-;8019:7;8045:20;8057:7;8045:11;:20::i;:::-;:25;;7955:122;-1:-1:-1;;7955:122:13:o;5202:203::-;5266:7;-1:-1:-1;;;;;5289:19:13;;5285:60;;5317:28;;-1:-1:-1;;;5317:28:13;;;;;;;;;;;5285:60;-1:-1:-1;;;;;;5370:19:13;;;;;:12;:19;;;;;:27;;;;5202:203::o;8301:102::-;8357:13;8389:7;8382:14;;;;;:::i;9862:274::-;-1:-1:-1;;;;;9952:24:13;;719:10:6;9952:24:13;9948:54;;;9985:17;;-1:-1:-1;;;9985:17:13;;;;;;;;;;;9948:54;719:10:6;10013:32:13;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10013:42:13;;;;;;;;;;;;:53;;-1:-1:-1;;10013:53:13;;;;;;;;;;10081:48;;5206:41:14;;;10013:42:13;;719:10:6;10081:48:13;;5179:18:14;10081:48:13;;;;;;;9862:274;;:::o;10901:359::-;11062:28;11072:4;11078:2;11082:7;11062:9;:28::i;:::-;-1:-1:-1;;;;;11104:13:13;;1465:19:5;:23;;11104:76:13;;;;;11124:56;11155:4;11161:2;11165:7;11174:5;11124:30;:56::i;:::-;11123:57;11104:76;11100:154;;;11203:40;;-1:-1:-1;;;11203:40:13;;;;;;;;;;;11100:154;10901:359;;;;:::o;8469:313::-;8542:13;8572:16;8580:7;8572;:16::i;:::-;8567:59;;8597:29;;-1:-1:-1;;;8597:29:13;;;;;;;;;;;8567:59;8637:21;8661:10;9099:9;;;;;;;;;-1:-1:-1;9099:9:13;;;9023:92;8661:10;8637:34;;8694:7;8688:21;8713:1;8688:26;;:87;;;;;;;;;;;;;;;;;8741:7;8750:18;:7;:16;:18::i;:::-;8724:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8688:87;8681:94;8469:313;-1:-1:-1;;;8469:313:13:o;11506:184::-;11563:4;11626:13;;11616:7;:23;11586:97;;;;-1:-1:-1;;11656:20:13;;;;:11;:20;;;;;:27;-1:-1:-1;;;11656:27:13;;;;11655:28;;11506:184::o;18922:189::-;19032:24;;;;:15;:24;;;;;;:29;;;;-1:-1:-1;;;;;19032:29:13;;;;;;;;;19076:28;;19032:24;;19076:28;;;;;;;18922:189;;;:::o;14528:2067::-;14638:35;14676:20;14688:7;14676:11;:20::i;:::-;14749:18;;14638:58;;-1:-1:-1;14707:22:13;;-1:-1:-1;;;;;14733:34:13;719:10:6;-1:-1:-1;;;;;14733:34:13;;:100;;;-1:-1:-1;14800:18:13;;14783:50;;719:10:6;10202:162:13;:::i;14783:50::-;14733:152;;;-1:-1:-1;719:10:6;14849:20:13;14861:7;14849:11;:20::i;:::-;-1:-1:-1;;;;;14849:36:13;;14733:152;14707:179;;14902:17;14897:66;;14928:35;;-1:-1:-1;;;14928:35:13;;;;;;;;;;;14897:66;14999:4;-1:-1:-1;;;;;14977:26:13;:13;:18;;;-1:-1:-1;;;;;14977:26:13;;14973:67;;15012:28;;-1:-1:-1;;;15012:28:13;;;;;;;;;;;14973:67;-1:-1:-1;;;;;15054:16:13;;15050:52;;15079:23;;-1:-1:-1;;;15079:23:13;;;;;;;;;;;15050:52;15218:49;15235:1;15239:7;15248:13;:18;;;15218:8;:49::i;:::-;-1:-1:-1;;;;;15557:18:13;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;15557:31:13;;;;;;;-1:-1:-1;;15557:31:13;;;;;;;15602:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;15602:29:13;;;;;;;;;;;15646:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;15690:61:13;;;;-1:-1:-1;;;15735:15:13;15690:61;;;;;;;;;;;16021:11;;;16050:24;;;;;:29;16021:11;;16050:29;16046:438;;16272:13;;16258:11;:27;16254:216;;;16341:18;;;16309:24;;;:11;:24;;;;;;;;:50;;16423:28;;;;16381:70;;-1:-1:-1;;;16381:70:13;-1:-1:-1;;;;;;16381:70:13;;;-1:-1:-1;;;;;16309:50:13;;;16381:70;;;;;;;16254:216;14528:2067;16528:7;16524:2;-1:-1:-1;;;;;16509:27:13;16518:4;-1:-1:-1;;;;;16509:27:13;;;;;;;;;;;14528:2067;;;;;:::o;6815:1083::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;6924:7:13;7004:13;;6997:4;:20;6966:868;;;7037:31;7071:17;;;:11;:17;;;;;;;;;7037:51;;;;;;;;;-1:-1:-1;;;;;7037:51:13;;;;-1:-1:-1;;;7037:51:13;;;;;;;;;;;-1:-1:-1;;;7037:51:13;;;;;;;;;;;;;;7106:714;;7155:14;;-1:-1:-1;;;;;7155:28:13;;7151:99;;7218:9;6815:1083;-1:-1:-1;;;6815:1083:13:o;7151:99::-;-1:-1:-1;;;7586:6:13;7630:17;;;;:11;:17;;;;;;;;;7618:29;;;;;;;;;-1:-1:-1;;;;;7618:29:13;;;;;-1:-1:-1;;;7618:29:13;;;;;;;;;;;-1:-1:-1;;;7618:29:13;;;;;;;;;;;;;7677:28;7673:107;;7744:9;6815:1083;-1:-1:-1;;;6815:1083:13:o;7673:107::-;7547:255;;;6966:868;;7860:31;;-1:-1:-1;;;7860:31:13;;;;;;;;;;;19592:650;19770:72;;-1:-1:-1;;;19770:72:13;;19750:4;;-1:-1:-1;;;;;19770:36:13;;;;;:72;;719:10:6;;19821:4:13;;19827:7;;19836:5;;19770:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19770:72:13;;;;;;;;-1:-1:-1;;19770:72:13;;;;;;;;;;;;:::i;:::-;;;19766:470;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20001:13:13;;19997:229;;20046:40;;-1:-1:-1;;;20046:40:13;;;;;;;;;;;19997:229;20186:6;20180:13;20171:6;20167:2;20163:15;20156:38;19766:470;-1:-1:-1;;;;;;19888:55:13;-1:-1:-1;;;19888:55:13;;-1:-1:-1;19766:470:13;19592:650;;;;;;:::o;328:703:7:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:7;;;;;;;;;;;;-1:-1:-1;;;627:10:7;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:7;;-1:-1:-1;773:2:7;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;-1:-1:-1;;;817:17:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:7;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:7;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;-1:-1:-1;;;902:14:7;;;;;;;;;;;;:56;;;;;;;;;;-1:-1:-1;972:11:7;981:2;972:11;;:::i;:::-;;;844:150;;14:196:14;82:20;;-1:-1:-1;;;;;131:54:14;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:196::-;274:6;327:2;315:9;306:7;302:23;298:32;295:2;;;348:6;340;333:22;295:2;376:29;395:9;376:29;:::i;416:270::-;484:6;492;545:2;533:9;524:7;520:23;516:32;513:2;;;566:6;558;551:22;513:2;594:29;613:9;594:29;:::i;:::-;584:39;;642:38;676:2;665:9;661:18;642:38;:::i;:::-;632:48;;503:183;;;;;:::o;691:338::-;768:6;776;784;837:2;825:9;816:7;812:23;808:32;805:2;;;858:6;850;843:22;805:2;886:29;905:9;886:29;:::i;:::-;876:39;;934:38;968:2;957:9;953:18;934:38;:::i;:::-;924:48;;1019:2;1008:9;1004:18;991:32;981:42;;795:234;;;;;:::o;1034:1183::-;1129:6;1137;1145;1153;1206:3;1194:9;1185:7;1181:23;1177:33;1174:2;;;1228:6;1220;1213:22;1174:2;1256:29;1275:9;1256:29;:::i;:::-;1246:39;;1304:38;1338:2;1327:9;1323:18;1304:38;:::i;:::-;1294:48;;1389:2;1378:9;1374:18;1361:32;1351:42;;1444:2;1433:9;1429:18;1416:32;1467:18;1508:2;1500:6;1497:14;1494:2;;;1529:6;1521;1514:22;1494:2;1572:6;1561:9;1557:22;1547:32;;1617:7;1610:4;1606:2;1602:13;1598:27;1588:2;;1644:6;1636;1629:22;1588:2;1685;1672:16;1707:2;1703;1700:10;1697:2;;;1713:18;;:::i;:::-;1788:2;1782:9;1756:2;1842:13;;-1:-1:-1;;1838:22:14;;;1862:2;1834:31;1830:40;1818:53;;;1886:18;;;1906:22;;;1883:46;1880:2;;;1932:18;;:::i;:::-;1972:10;1968:2;1961:22;2007:2;1999:6;1992:18;2047:7;2042:2;2037;2033;2029:11;2025:20;2022:33;2019:2;;;2073:6;2065;2058:22;2019:2;2134;2129;2125;2121:11;2116:2;2108:6;2104:15;2091:46;2157:15;;;2174:2;2153:24;2146:40;;;;1164:1053;;;;-1:-1:-1;1164:1053:14;;-1:-1:-1;;;;1164:1053:14:o;2222:367::-;2287:6;2295;2348:2;2336:9;2327:7;2323:23;2319:32;2316:2;;;2369:6;2361;2354:22;2316:2;2397:29;2416:9;2397:29;:::i;:::-;2387:39;;2476:2;2465:9;2461:18;2448:32;2523:5;2516:13;2509:21;2502:5;2499:32;2489:2;;2550:6;2542;2535:22;2489:2;2578:5;2568:15;;;2306:283;;;;;:::o;2594:264::-;2662:6;2670;2723:2;2711:9;2702:7;2698:23;2694:32;2691:2;;;2744:6;2736;2729:22;2691:2;2772:29;2791:9;2772:29;:::i;:::-;2762:39;2848:2;2833:18;;;;2820:32;;-1:-1:-1;;;2681:177:14:o;2863:255::-;2921:6;2974:2;2962:9;2953:7;2949:23;2945:32;2942:2;;;2995:6;2987;2980:22;2942:2;3039:9;3026:23;3058:30;3082:5;3058:30;:::i;3123:259::-;3192:6;3245:2;3233:9;3224:7;3220:23;3216:32;3213:2;;;3266:6;3258;3251:22;3213:2;3303:9;3297:16;3322:30;3346:5;3322:30;:::i;3387:190::-;3446:6;3499:2;3487:9;3478:7;3474:23;3470:32;3467:2;;;3520:6;3512;3505:22;3467:2;-1:-1:-1;3548:23:14;;3457:120;-1:-1:-1;3457:120:14:o;3582:257::-;3623:3;3661:5;3655:12;3688:6;3683:3;3676:19;3704:63;3760:6;3753:4;3748:3;3744:14;3737:4;3730:5;3726:16;3704:63;:::i;:::-;3821:2;3800:15;-1:-1:-1;;3796:29:14;3787:39;;;;3828:4;3783:50;;3631:208;-1:-1:-1;;3631:208:14:o;3844:470::-;4023:3;4061:6;4055:13;4077:53;4123:6;4118:3;4111:4;4103:6;4099:17;4077:53;:::i;:::-;4193:13;;4152:16;;;;4215:57;4193:13;4152:16;4249:4;4237:17;;4215:57;:::i;:::-;4288:20;;4031:283;-1:-1:-1;;;;4031:283:14:o;4550:511::-;4744:4;-1:-1:-1;;;;;4854:2:14;4846:6;4842:15;4831:9;4824:34;4906:2;4898:6;4894:15;4889:2;4878:9;4874:18;4867:43;;4946:6;4941:2;4930:9;4926:18;4919:34;4989:3;4984:2;4973:9;4969:18;4962:31;5010:45;5050:3;5039:9;5035:19;5027:6;5010:45;:::i;:::-;5002:53;4753:308;-1:-1:-1;;;;;;4753:308:14:o;5258:219::-;5407:2;5396:9;5389:21;5370:4;5427:44;5467:2;5456:9;5452:18;5444:6;5427:44;:::i;5664:128::-;5704:3;5735:1;5731:6;5728:1;5725:13;5722:2;;;5741:18;;:::i;:::-;-1:-1:-1;5777:9:14;;5712:80::o;5797:120::-;5837:1;5863;5853:2;;5868:18;;:::i;:::-;-1:-1:-1;5902:9:14;;5843:74::o;5922:125::-;5962:4;5990:1;5987;5984:8;5981:2;;;5995:18;;:::i;:::-;-1:-1:-1;6032:9:14;;5971:76::o;6052:258::-;6124:1;6134:113;6148:6;6145:1;6142:13;6134:113;;;6224:11;;;6218:18;6205:11;;;6198:39;6170:2;6163:10;6134:113;;;6265:6;6262:1;6259:13;6256:2;;;-1:-1:-1;;6300:1:14;6282:16;;6275:27;6105:205::o;6315:380::-;6394:1;6390:12;;;;6437;;;6458:2;;6512:4;6504:6;6500:17;6490:27;;6458:2;6565;6557:6;6554:14;6534:18;6531:38;6528:2;;;6611:10;6606:3;6602:20;6599:1;6592:31;6646:4;6643:1;6636:15;6674:4;6671:1;6664:15;6528:2;;6370:325;;;:::o;6700:135::-;6739:3;-1:-1:-1;;6760:17:14;;6757:2;;;6780:18;;:::i;:::-;-1:-1:-1;6827:1:14;6816:13;;6747:88::o;6840:112::-;6872:1;6898;6888:2;;6903:18;;:::i;:::-;-1:-1:-1;6937:9:14;;6878:74::o;6957:127::-;7018:10;7013:3;7009:20;7006:1;6999:31;7049:4;7046:1;7039:15;7073:4;7070:1;7063:15;7089:127;7150:10;7145:3;7141:20;7138:1;7131:31;7181:4;7178:1;7171:15;7205:4;7202:1;7195:15;7221:127;7282:10;7277:3;7273:20;7270:1;7263:31;7313:4;7310:1;7303:15;7337:4;7334:1;7327:15;7353:131;-1:-1:-1;;;;;;7427:32:14;;7417:43;;7407:2;;7474:1;7471;7464:12;7407:2;7397:87;:::o"
            },
            "methodIdentifiers": {
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "getApproved(uint256)": "081812fc",
              "isApprovedForAll(address,address)": "e985e9c5",
              "name()": "06fdde03",
              "ownerOf(uint256)": "6352211e",
              "safeTransferFrom(address,address,uint256)": "42842e0e",
              "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "tokenURI(uint256)": "c87b56dd",
              "totalSupply()": "18160ddd",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApprovalToCurrentOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ApproveToCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceQueryForZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerQueryForNonexistentToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferCallerNotOwnerNorApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFromIncorrectOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToNonERC721ReceiverImplementer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferToZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"URIQueryForNonexistentToken\",\"type\":\"error\"},{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"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\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including the Metadata extension. Built to optimize for lower gas during batch mints. Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"erc721a/contracts/ERC721A.sol\":\"ERC721A\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26fef835622b46a5ba08b3ef6b46a22e94b5f285d0f0fb66b703bd30217d2c34\",\"dweb:/ipfs/QmZ548qdwfL1qF7aXz3xh1GCdTiST81kGGuKRqVUfYmPZR\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"erc721a/contracts/ERC721A.sol\":{\"keccak256\":\"0x5a3f70f309452b24ff4268be3c57c88f2c9aa7b8711b4951f0521fd0488b7b51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2b72bf6e6556d459e5887094a2eeff26aa83d1031092f056a93ea746e02bcd0\",\"dweb:/ipfs/QmS9FvFwmUJvzsQqBUHQ7xFyXkoJwMtRcVmPmBMQn3QnVK\"]}},\"version\":1}"
        }
      }
    },
    "sources": {
      "@openzeppelin/contracts/access/Ownable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
          "exportedSymbols": {
            "Context": [
              613
            ],
            "Ownable": [
              104
            ]
          },
          "id": 105,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "87:23:0"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "../utils/Context.sol",
              "id": 2,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 105,
              "sourceUnit": 614,
              "src": "112:30:0",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 4,
                    "name": "Context",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 613,
                    "src": "668:7:0"
                  },
                  "id": 5,
                  "nodeType": "InheritanceSpecifier",
                  "src": "668:7:0"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3,
                "nodeType": "StructuredDocumentation",
                "src": "144:494:0",
                "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
              },
              "fullyImplemented": true,
              "id": 104,
              "linearizedBaseContracts": [
                104,
                613
              ],
              "name": "Ownable",
              "nameLocation": "657:7:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 7,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "698:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 104,
                  "src": "682:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "682:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "id": 13,
                  "name": "OwnershipTransferred",
                  "nameLocation": "717:20:0",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousOwner",
                        "nameLocation": "754:13:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 13,
                        "src": "738:29:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 8,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 11,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "785:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 13,
                        "src": "769:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "769:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:57:0"
                  },
                  "src": "711:84:0"
                },
                {
                  "body": {
                    "id": 22,
                    "nodeType": "Block",
                    "src": "911:49:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 18,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "940:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 19,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "940:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 17,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 103,
                            "src": "921:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 20,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "921:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21,
                        "nodeType": "ExpressionStatement",
                        "src": "921:32:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 14,
                    "nodeType": "StructuredDocumentation",
                    "src": "801:91:0",
                    "text": " @dev Initializes the contract setting the deployer as the initial owner."
                  },
                  "id": 23,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "908:2:0"
                  },
                  "returnParameters": {
                    "id": 16,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "911:0:0"
                  },
                  "scope": 104,
                  "src": "897:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 31,
                    "nodeType": "Block",
                    "src": "1091:30:0",
                    "statements": [
                      {
                        "expression": {
                          "id": 29,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7,
                          "src": "1108:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 28,
                        "id": 30,
                        "nodeType": "Return",
                        "src": "1101:13:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 24,
                    "nodeType": "StructuredDocumentation",
                    "src": "966:65:0",
                    "text": " @dev Returns the address of the current owner."
                  },
                  "functionSelector": "8da5cb5b",
                  "id": 32,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nameLocation": "1045:5:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1050:2:0"
                  },
                  "returnParameters": {
                    "id": 28,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 32,
                        "src": "1082:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1082:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1081:9:0"
                  },
                  "scope": 104,
                  "src": "1036:85:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 45,
                    "nodeType": "Block",
                    "src": "1230:96:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 40,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 36,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32,
                                  "src": "1248:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 37,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1248:7:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 38,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 603,
                                  "src": "1259:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 39,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1259:12:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1248:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                              "id": 41,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1273:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                                "typeString": "literal_string \"Ownable: caller is not the owner\""
                              },
                              "value": "Ownable: caller is not the owner"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
                                "typeString": "literal_string \"Ownable: caller is not the owner\""
                              }
                            ],
                            "id": 35,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1240:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 42,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1240:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 43,
                        "nodeType": "ExpressionStatement",
                        "src": "1240:68:0"
                      },
                      {
                        "id": 44,
                        "nodeType": "PlaceholderStatement",
                        "src": "1318:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 33,
                    "nodeType": "StructuredDocumentation",
                    "src": "1127:77:0",
                    "text": " @dev Throws if called by any account other than the owner."
                  },
                  "id": 46,
                  "name": "onlyOwner",
                  "nameLocation": "1218:9:0",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 34,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1227:2:0"
                  },
                  "src": "1209:117:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 59,
                    "nodeType": "Block",
                    "src": "1722:47:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 55,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1759:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 54,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1751:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 53,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1751:7:0",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 56,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1751:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 52,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 103,
                            "src": "1732:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 57,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1732:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 58,
                        "nodeType": "ExpressionStatement",
                        "src": "1732:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "1332:331:0",
                    "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."
                  },
                  "functionSelector": "715018a6",
                  "id": 60,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 50,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 49,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 46,
                        "src": "1712:9:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1712:9:0"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nameLocation": "1677:17:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 48,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1694:2:0"
                  },
                  "returnParameters": {
                    "id": 51,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1722:0:0"
                  },
                  "scope": 104,
                  "src": "1668:101:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 82,
                    "nodeType": "Block",
                    "src": "1988:128:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 74,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 69,
                                "name": "newOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63,
                                "src": "2006:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 72,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2026:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 71,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2018:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 70,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2018:7:0",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 73,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2018:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2006:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373",
                              "id": 75,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2030:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
                                "typeString": "literal_string \"Ownable: new owner is the zero address\""
                              },
                              "value": "Ownable: new owner is the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
                                "typeString": "literal_string \"Ownable: new owner is the zero address\""
                              }
                            ],
                            "id": 68,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1998:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 76,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1998:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 77,
                        "nodeType": "ExpressionStatement",
                        "src": "1998:73:0"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 79,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63,
                              "src": "2100:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 78,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 103,
                            "src": "2081:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 80,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2081:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 81,
                        "nodeType": "ExpressionStatement",
                        "src": "2081:28:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 61,
                    "nodeType": "StructuredDocumentation",
                    "src": "1775:138:0",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
                  },
                  "functionSelector": "f2fde38b",
                  "id": 83,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 66,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 65,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 46,
                        "src": "1978:9:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1978:9:0"
                    }
                  ],
                  "name": "transferOwnership",
                  "nameLocation": "1927:17:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 64,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 63,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "1953:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 83,
                        "src": "1945:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1945:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1944:18:0"
                  },
                  "returnParameters": {
                    "id": 67,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1988:0:0"
                  },
                  "scope": 104,
                  "src": "1918:198:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 102,
                    "nodeType": "Block",
                    "src": "2333:124:0",
                    "statements": [
                      {
                        "assignments": [
                          90
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 90,
                            "mutability": "mutable",
                            "name": "oldOwner",
                            "nameLocation": "2351:8:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 102,
                            "src": "2343:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 89,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2343:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 92,
                        "initialValue": {
                          "id": 91,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7,
                          "src": "2362:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2343:25:0"
                      },
                      {
                        "expression": {
                          "id": 95,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 93,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7,
                            "src": "2378:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 94,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 86,
                            "src": "2387:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2378:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 96,
                        "nodeType": "ExpressionStatement",
                        "src": "2378:17:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 98,
                              "name": "oldOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 90,
                              "src": "2431:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 99,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 86,
                              "src": "2441:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 97,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13,
                            "src": "2410:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2410:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 101,
                        "nodeType": "EmitStatement",
                        "src": "2405:45:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 84,
                    "nodeType": "StructuredDocumentation",
                    "src": "2122:143:0",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."
                  },
                  "id": 103,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferOwnership",
                  "nameLocation": "2279:18:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 87,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 86,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "2306:8:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 103,
                        "src": "2298:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 85,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2298:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2297:18:0"
                  },
                  "returnParameters": {
                    "id": 88,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2333:0:0"
                  },
                  "scope": 104,
                  "src": "2270:187:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 105,
              "src": "639:1820:0",
              "usedErrors": []
            }
          ],
          "src": "87:2373:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts/token/ERC721/IERC721.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
          "exportedSymbols": {
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ]
          },
          "id": 221,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 106,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "93:23:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../../utils/introspection/IERC165.sol",
              "id": 107,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 221,
              "sourceUnit": 853,
              "src": "118:47:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 109,
                    "name": "IERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 852,
                    "src": "256:7:1"
                  },
                  "id": 110,
                  "nodeType": "InheritanceSpecifier",
                  "src": "256:7:1"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 108,
                "nodeType": "StructuredDocumentation",
                "src": "167:67:1",
                "text": " @dev Required interface of an ERC721 compliant contract."
              },
              "fullyImplemented": false,
              "id": 220,
              "linearizedBaseContracts": [
                220,
                852
              ],
              "name": "IERC721",
              "nameLocation": "245:7:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 111,
                    "nodeType": "StructuredDocumentation",
                    "src": "270:88:1",
                    "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
                  },
                  "id": 119,
                  "name": "Transfer",
                  "nameLocation": "369:8:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 113,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "394:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 119,
                        "src": "378:20:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "378:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 115,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "416:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 119,
                        "src": "400:18:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 114,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "400:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 117,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "436:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 119,
                        "src": "420:23:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "420:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "377:67:1"
                  },
                  "src": "363:82:1"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 120,
                    "nodeType": "StructuredDocumentation",
                    "src": "451:94:1",
                    "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
                  },
                  "id": 128,
                  "name": "Approval",
                  "nameLocation": "556:8:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 122,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "581:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 128,
                        "src": "565:21:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 121,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "565:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 124,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "604:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 128,
                        "src": "588:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 123,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "588:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 126,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "630:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 128,
                        "src": "614:23:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "614:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "564:74:1"
                  },
                  "src": "550:89:1"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "645:117:1",
                    "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
                  },
                  "id": 137,
                  "name": "ApprovalForAll",
                  "nameLocation": "773:14:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 136,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "804:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "788:21:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "788:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 133,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "827:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "811:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "811:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 135,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "842:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 137,
                        "src": "837:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 134,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "837:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "787:64:1"
                  },
                  "src": "767:85:1"
                },
                {
                  "documentation": {
                    "id": 138,
                    "nodeType": "StructuredDocumentation",
                    "src": "858:76:1",
                    "text": " @dev Returns the number of tokens in ``owner``'s account."
                  },
                  "functionSelector": "70a08231",
                  "id": 145,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "948:9:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 141,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 140,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "966:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 145,
                        "src": "958:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 139,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "958:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "957:15:1"
                  },
                  "returnParameters": {
                    "id": 144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 143,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "1004:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 145,
                        "src": "996:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "996:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "995:17:1"
                  },
                  "scope": 220,
                  "src": "939:74:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 146,
                    "nodeType": "StructuredDocumentation",
                    "src": "1019:131:1",
                    "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "6352211e",
                  "id": 153,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "1164:7:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 148,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1180:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1172:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 147,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1172:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1171:17:1"
                  },
                  "returnParameters": {
                    "id": 152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 151,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1220:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 153,
                        "src": "1212:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1212:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1211:15:1"
                  },
                  "scope": 220,
                  "src": "1155:72:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 154,
                    "nodeType": "StructuredDocumentation",
                    "src": "1233:690:1",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "42842e0e",
                  "id": 163,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "1937:16:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 161,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 156,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1971:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 163,
                        "src": "1963:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 155,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1963:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 158,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1993:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 163,
                        "src": "1985:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 157,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1985:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 160,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2013:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 163,
                        "src": "2005:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2005:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1953:73:1"
                  },
                  "returnParameters": {
                    "id": 162,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2035:0:1"
                  },
                  "scope": 220,
                  "src": "1928:108:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 164,
                    "nodeType": "StructuredDocumentation",
                    "src": "2042:504:1",
                    "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 173,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "2560:12:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 171,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 166,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2590:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2582:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 165,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2582:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 168,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2612:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2604:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 167,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2604:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 170,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2632:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "2624:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 169,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2624:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2572:73:1"
                  },
                  "returnParameters": {
                    "id": 172,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2654:0:1"
                  },
                  "scope": 220,
                  "src": "2551:104:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 174,
                    "nodeType": "StructuredDocumentation",
                    "src": "2661:452:1",
                    "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 181,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "3127:7:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 176,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3143:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 181,
                        "src": "3135:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 175,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3135:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 178,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3155:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 181,
                        "src": "3147:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 177,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3147:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3134:29:1"
                  },
                  "returnParameters": {
                    "id": 180,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3172:0:1"
                  },
                  "scope": 220,
                  "src": "3118:55:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 182,
                    "nodeType": "StructuredDocumentation",
                    "src": "3179:139:1",
                    "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
                  },
                  "functionSelector": "081812fc",
                  "id": 189,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "3332:11:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 184,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3352:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "3344:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 183,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3344:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3343:17:1"
                  },
                  "returnParameters": {
                    "id": 188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 187,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3392:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "3384:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3384:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3383:18:1"
                  },
                  "scope": 220,
                  "src": "3323:79:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 190,
                    "nodeType": "StructuredDocumentation",
                    "src": "3408:309:1",
                    "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event."
                  },
                  "functionSelector": "a22cb465",
                  "id": 197,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "3731:17:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 195,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 192,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3757:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 197,
                        "src": "3749:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 191,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3749:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 194,
                        "mutability": "mutable",
                        "name": "_approved",
                        "nameLocation": "3772:9:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 197,
                        "src": "3767:14:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 193,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3767:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3748:34:1"
                  },
                  "returnParameters": {
                    "id": 196,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3791:0:1"
                  },
                  "scope": 220,
                  "src": "3722:70:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 198,
                    "nodeType": "StructuredDocumentation",
                    "src": "3798:138:1",
                    "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
                  },
                  "functionSelector": "e985e9c5",
                  "id": 207,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "3950:16:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 200,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3975:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 207,
                        "src": "3967:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3967:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 202,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3990:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 207,
                        "src": "3982:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 201,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3982:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3966:33:1"
                  },
                  "returnParameters": {
                    "id": 206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 205,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 207,
                        "src": "4023:4:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4023:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4022:6:1"
                  },
                  "scope": 220,
                  "src": "3941:88:1",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 208,
                    "nodeType": "StructuredDocumentation",
                    "src": "4035:556:1",
                    "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 219,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4605:16:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 210,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4639:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 219,
                        "src": "4631:12:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 209,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4631:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 212,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4661:2:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 219,
                        "src": "4653:10:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 211,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4653:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 214,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4681:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 219,
                        "src": "4673:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4673:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 216,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4713:4:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 219,
                        "src": "4698:19:1",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 215,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4698:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4621:102:1"
                  },
                  "returnParameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4732:0:1"
                  },
                  "scope": 220,
                  "src": "4596:137:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 221,
              "src": "235:4500:1",
              "usedErrors": []
            }
          ],
          "src": "93:4643:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
          "exportedSymbols": {
            "IERC721Receiver": [
              238
            ]
          },
          "id": 239,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 222,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:23:2"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 223,
                "nodeType": "StructuredDocumentation",
                "src": "126:152:2",
                "text": " @title ERC721 token receiver interface\n @dev Interface for any contract that wants to support safeTransfers\n from ERC721 asset contracts."
              },
              "fullyImplemented": false,
              "id": 238,
              "linearizedBaseContracts": [
                238
              ],
              "name": "IERC721Receiver",
              "nameLocation": "289:15:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 224,
                    "nodeType": "StructuredDocumentation",
                    "src": "311:485:2",
                    "text": " @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n by `operator` from `from`, this function is called.\n It must return its Solidity selector to confirm the token transfer.\n If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`."
                  },
                  "functionSelector": "150b7a02",
                  "id": 237,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC721Received",
                  "nameLocation": "810:16:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 226,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "844:8:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 237,
                        "src": "836:16:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 225,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "836:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 228,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "870:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 237,
                        "src": "862:12:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 227,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "862:7:2",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 230,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "892:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 237,
                        "src": "884:15:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 229,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "884:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 232,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "924:4:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 237,
                        "src": "909:19:2",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 231,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "909:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "826:108:2"
                  },
                  "returnParameters": {
                    "id": 236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 235,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 237,
                        "src": "953:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 234,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "953:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "952:8:2"
                  },
                  "scope": 238,
                  "src": "801:160:2",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 239,
              "src": "279:684:2",
              "usedErrors": []
            }
          ],
          "src": "101:863:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
          "exportedSymbols": {
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ],
            "IERC721Enumerable": [
              269
            ]
          },
          "id": 270,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 240,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "129:23:3"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../IERC721.sol",
              "id": 241,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 270,
              "sourceUnit": 221,
              "src": "154:24:3",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 243,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 220,
                    "src": "348:7:3"
                  },
                  "id": 244,
                  "nodeType": "InheritanceSpecifier",
                  "src": "348:7:3"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 242,
                "nodeType": "StructuredDocumentation",
                "src": "180:136:3",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 269,
              "linearizedBaseContracts": [
                269,
                220,
                852
              ],
              "name": "IERC721Enumerable",
              "nameLocation": "327:17:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 245,
                    "nodeType": "StructuredDocumentation",
                    "src": "362:82:3",
                    "text": " @dev Returns the total amount of tokens stored by the contract."
                  },
                  "functionSelector": "18160ddd",
                  "id": 250,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "458:11:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 246,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "469:2:3"
                  },
                  "returnParameters": {
                    "id": 249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 248,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 250,
                        "src": "495:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 247,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "495:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "494:9:3"
                  },
                  "scope": 269,
                  "src": "449:55:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 251,
                    "nodeType": "StructuredDocumentation",
                    "src": "510:171:3",
                    "text": " @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n Use along with {balanceOf} to enumerate all of ``owner``'s tokens."
                  },
                  "functionSelector": "2f745c59",
                  "id": 260,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenOfOwnerByIndex",
                  "nameLocation": "695:19:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 253,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "723:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 260,
                        "src": "715:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 252,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "715:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 255,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "738:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 260,
                        "src": "730:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "730:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "714:30:3"
                  },
                  "returnParameters": {
                    "id": 259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 258,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 260,
                        "src": "768:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 257,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "768:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "767:9:3"
                  },
                  "scope": 269,
                  "src": "686:91:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 261,
                    "nodeType": "StructuredDocumentation",
                    "src": "783:164:3",
                    "text": " @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n Use along with {totalSupply} to enumerate all tokens."
                  },
                  "functionSelector": "4f6ccce7",
                  "id": 268,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenByIndex",
                  "nameLocation": "961:12:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 263,
                        "mutability": "mutable",
                        "name": "index",
                        "nameLocation": "982:5:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 268,
                        "src": "974:13:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 262,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "974:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "973:15:3"
                  },
                  "returnParameters": {
                    "id": 267,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 266,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 268,
                        "src": "1012:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 265,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1012:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1011:9:3"
                  },
                  "scope": 269,
                  "src": "952:69:3",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 270,
              "src": "317:706:3",
              "usedErrors": []
            }
          ],
          "src": "129:895:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
          "exportedSymbols": {
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ],
            "IERC721Metadata": [
              296
            ]
          },
          "id": 297,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 271,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "112:23:4"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "../IERC721.sol",
              "id": 272,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 297,
              "sourceUnit": 221,
              "src": "137:24:4",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 274,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 220,
                    "src": "326:7:4"
                  },
                  "id": 275,
                  "nodeType": "InheritanceSpecifier",
                  "src": "326:7:4"
                }
              ],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 273,
                "nodeType": "StructuredDocumentation",
                "src": "163:133:4",
                "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721"
              },
              "fullyImplemented": false,
              "id": 296,
              "linearizedBaseContracts": [
                296,
                220,
                852
              ],
              "name": "IERC721Metadata",
              "nameLocation": "307:15:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 276,
                    "nodeType": "StructuredDocumentation",
                    "src": "340:58:4",
                    "text": " @dev Returns the token collection name."
                  },
                  "functionSelector": "06fdde03",
                  "id": 281,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "412:4:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 277,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "416:2:4"
                  },
                  "returnParameters": {
                    "id": 280,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 279,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 281,
                        "src": "442:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 278,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "442:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "441:15:4"
                  },
                  "scope": 296,
                  "src": "403:54:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 282,
                    "nodeType": "StructuredDocumentation",
                    "src": "463:60:4",
                    "text": " @dev Returns the token collection symbol."
                  },
                  "functionSelector": "95d89b41",
                  "id": 287,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "537:6:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "543:2:4"
                  },
                  "returnParameters": {
                    "id": 286,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 285,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 287,
                        "src": "569:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 284,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "569:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "568:15:4"
                  },
                  "scope": 296,
                  "src": "528:56:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 288,
                    "nodeType": "StructuredDocumentation",
                    "src": "590:90:4",
                    "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 295,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "694:8:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 291,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 290,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "711:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 295,
                        "src": "703:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 289,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "703:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "702:17:4"
                  },
                  "returnParameters": {
                    "id": 294,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 293,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 295,
                        "src": "743:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 292,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "743:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "742:15:4"
                  },
                  "scope": 296,
                  "src": "685:73:4",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 297,
              "src": "297:463:4",
              "usedErrors": []
            }
          ],
          "src": "112:649:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "exportedSymbols": {
            "Address": [
              591
            ]
          },
          "id": 592,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 298,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".1"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:23:5"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 299,
                "nodeType": "StructuredDocumentation",
                "src": "126:67:5",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 591,
              "linearizedBaseContracts": [
                591
              ],
              "name": "Address",
              "nameLocation": "202:7:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 313,
                    "nodeType": "Block",
                    "src": "1241:254:5",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 311,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 307,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 302,
                                "src": "1465:7:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "1465:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1465:19:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1487:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1465:23:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 306,
                        "id": 312,
                        "nodeType": "Return",
                        "src": "1458:30:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 300,
                    "nodeType": "StructuredDocumentation",
                    "src": "216:954:5",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="
                  },
                  "id": 314,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nameLocation": "1184:10:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 302,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1203:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 314,
                        "src": "1195:15:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 301,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1195:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1194:17:5"
                  },
                  "returnParameters": {
                    "id": 306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 305,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 314,
                        "src": "1235:4:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1235:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1234:6:5"
                  },
                  "scope": 591,
                  "src": "1175:320:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 347,
                    "nodeType": "Block",
                    "src": "2483:241:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 329,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 325,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2509:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$591",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$591",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 324,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2501:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 323,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2501:7:5",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 326,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2501:13:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "2501:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 328,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 319,
                                "src": "2526:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2501:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2534:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 322,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2493:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2493:73:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 332,
                        "nodeType": "ExpressionStatement",
                        "src": "2493:73:5"
                      },
                      {
                        "assignments": [
                          334,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 334,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "2583:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 347,
                            "src": "2578:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 333,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2578:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 341,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2626:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 335,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 317,
                                "src": "2596:9:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "2596:14:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 338,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 337,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 319,
                                "src": "2618:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "2596:29:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2596:33:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2577:52:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 343,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 334,
                              "src": "2647:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2656:60:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 342,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2639:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2639:78:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 346,
                        "nodeType": "ExpressionStatement",
                        "src": "2639:78:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 315,
                    "nodeType": "StructuredDocumentation",
                    "src": "1501:906:5",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 348,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nameLocation": "2421:9:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 320,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 317,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2447:9:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 348,
                        "src": "2431:25:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 316,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2431:15:5",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 319,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "2466:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 348,
                        "src": "2458:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 318,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2458:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2430:43:5"
                  },
                  "returnParameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2483:0:5"
                  },
                  "scope": 591,
                  "src": "2412:312:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 364,
                    "nodeType": "Block",
                    "src": "3555:84:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 359,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 351,
                              "src": "3585:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 360,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 353,
                              "src": "3593:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3599:32:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 358,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              365,
                              385
                            ],
                            "referencedDeclaration": 385,
                            "src": "3572:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3572:60:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 357,
                        "id": 363,
                        "nodeType": "Return",
                        "src": "3565:67:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 349,
                    "nodeType": "StructuredDocumentation",
                    "src": "2730:731:5",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 365,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "3475:12:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 354,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 351,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3496:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 365,
                        "src": "3488:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 350,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3488:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 353,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3517:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 365,
                        "src": "3504:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 352,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3504:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3487:35:5"
                  },
                  "returnParameters": {
                    "id": 357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 365,
                        "src": "3541:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3541:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3540:14:5"
                  },
                  "scope": 591,
                  "src": "3466:173:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 384,
                    "nodeType": "Block",
                    "src": "4008:76:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 378,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 368,
                              "src": "4047:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 379,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 370,
                              "src": "4055:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4061:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "id": 381,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 372,
                              "src": "4064:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 377,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              405,
                              455
                            ],
                            "referencedDeclaration": 455,
                            "src": "4025:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4025:52:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 376,
                        "id": 383,
                        "nodeType": "Return",
                        "src": "4018:59:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 366,
                    "nodeType": "StructuredDocumentation",
                    "src": "3645:211:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 385,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "3870:12:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 373,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 368,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3900:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "3892:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 367,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3892:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 370,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3929:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "3916:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 369,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3916:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 372,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "3957:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "3943:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 371,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3943:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3882:93:5"
                  },
                  "returnParameters": {
                    "id": 376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 375,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "3994:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 374,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3994:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3993:14:5"
                  },
                  "scope": 591,
                  "src": "3861:223:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 404,
                    "nodeType": "Block",
                    "src": "4589:111:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 398,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 388,
                              "src": "4628:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 399,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 390,
                              "src": "4636:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 400,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 392,
                              "src": "4642:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4649:43:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 397,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              405,
                              455
                            ],
                            "referencedDeclaration": 455,
                            "src": "4606:21:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4606:87:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 396,
                        "id": 403,
                        "nodeType": "Return",
                        "src": "4599:94:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 386,
                    "nodeType": "StructuredDocumentation",
                    "src": "4090:351:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 405,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "4455:21:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 388,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4494:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "4486:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 387,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4486:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 390,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4523:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "4510:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 389,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4510:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4545:5:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "4537:13:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4537:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4476:80:5"
                  },
                  "returnParameters": {
                    "id": 396,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 395,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 405,
                        "src": "4575:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 394,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4575:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4574:14:5"
                  },
                  "scope": 591,
                  "src": "4446:254:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 454,
                    "nodeType": "Block",
                    "src": "5127:320:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 426,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 422,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "5153:4:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$591",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$591",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 421,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "5145:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 420,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5145:7:5",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 423,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5145:13:5",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "5145:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 425,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 412,
                                "src": "5170:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5145:30:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5177:40:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 419,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5137:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5137:81:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 429,
                        "nodeType": "ExpressionStatement",
                        "src": "5137:81:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 432,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 408,
                                  "src": "5247:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 431,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "5236:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5236:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5256:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              },
                              "value": "Address: call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              }
                            ],
                            "id": 430,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5228:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5228:60:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 436,
                        "nodeType": "ExpressionStatement",
                        "src": "5228:60:5"
                      },
                      {
                        "assignments": [
                          438,
                          440
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 438,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5305:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 454,
                            "src": "5300:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 437,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5300:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 440,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "5327:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 454,
                            "src": "5314:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 439,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5314:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 447,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 445,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 410,
                              "src": "5367:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 441,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 408,
                                "src": "5341:6:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "5341:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 443,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 412,
                                "src": "5360:5:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5341:25:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5341:31:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5299:73:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 449,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 438,
                              "src": "5406:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 450,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 440,
                              "src": "5415:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 451,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 414,
                              "src": "5427:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 448,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 590,
                            "src": "5389:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5389:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 418,
                        "id": 453,
                        "nodeType": "Return",
                        "src": "5382:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 406,
                    "nodeType": "StructuredDocumentation",
                    "src": "4706:237:5",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 455,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "4957:21:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 415,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 408,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4996:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "4988:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 407,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4988:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5025:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "5012:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5012:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 412,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5047:5:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "5039:13:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 411,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5039:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 414,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "5076:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "5062:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 413,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5062:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4978:116:5"
                  },
                  "returnParameters": {
                    "id": 418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 417,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 455,
                        "src": "5113:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 416,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5113:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5112:14:5"
                  },
                  "scope": 591,
                  "src": "4948:499:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 471,
                    "nodeType": "Block",
                    "src": "5724:97:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 466,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 458,
                              "src": "5760:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 467,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 460,
                              "src": "5768:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5774:39:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              },
                              "value": "Address: low-level static call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              }
                            ],
                            "id": 465,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              472,
                              507
                            ],
                            "referencedDeclaration": 507,
                            "src": "5741:18:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5741:73:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 464,
                        "id": 470,
                        "nodeType": "Return",
                        "src": "5734:80:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 456,
                    "nodeType": "StructuredDocumentation",
                    "src": "5453:166:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 472,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "5633:18:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 461,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 458,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "5660:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 472,
                        "src": "5652:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5652:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 460,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5681:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 472,
                        "src": "5668:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 459,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5668:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5651:35:5"
                  },
                  "returnParameters": {
                    "id": 464,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 463,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 472,
                        "src": "5710:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 462,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5710:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5709:14:5"
                  },
                  "scope": 591,
                  "src": "5624:197:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 506,
                    "nodeType": "Block",
                    "src": "6163:228:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 486,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 475,
                                  "src": "6192:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 485,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "6181:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6181:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6201:38:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              },
                              "value": "Address: static call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              }
                            ],
                            "id": 484,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6173:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6173:67:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 490,
                        "nodeType": "ExpressionStatement",
                        "src": "6173:67:5"
                      },
                      {
                        "assignments": [
                          492,
                          494
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 492,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "6257:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 506,
                            "src": "6252:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 491,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6252:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 494,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "6279:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 506,
                            "src": "6266:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 493,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6266:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 499,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 497,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 477,
                              "src": "6311:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 495,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 475,
                              "src": "6293:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "src": "6293:17:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6293:23:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6251:65:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 501,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 492,
                              "src": "6350:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 502,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 494,
                              "src": "6359:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 503,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 479,
                              "src": "6371:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 500,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 590,
                            "src": "6333:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6333:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 483,
                        "id": 505,
                        "nodeType": "Return",
                        "src": "6326:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 473,
                    "nodeType": "StructuredDocumentation",
                    "src": "5827:173:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 507,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "6014:18:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 475,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6050:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "6042:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 474,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6042:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 477,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6079:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "6066:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 476,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6066:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 479,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "6107:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "6093:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 478,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6093:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6032:93:5"
                  },
                  "returnParameters": {
                    "id": 483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 482,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 507,
                        "src": "6149:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 481,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6149:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6148:14:5"
                  },
                  "scope": 591,
                  "src": "6005:386:5",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 523,
                    "nodeType": "Block",
                    "src": "6667:101:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 518,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 510,
                              "src": "6705:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 519,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 512,
                              "src": "6713:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                              "id": 520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6719:41:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              },
                              "value": "Address: low-level delegate call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                                "typeString": "literal_string \"Address: low-level delegate call failed\""
                              }
                            ],
                            "id": 517,
                            "name": "functionDelegateCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              524,
                              559
                            ],
                            "referencedDeclaration": 559,
                            "src": "6684:20:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6684:77:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 516,
                        "id": 522,
                        "nodeType": "Return",
                        "src": "6677:84:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 508,
                    "nodeType": "StructuredDocumentation",
                    "src": "6397:168:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 524,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "6579:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 513,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 510,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "6608:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 524,
                        "src": "6600:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 509,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6600:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 512,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6629:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 524,
                        "src": "6616:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 511,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6616:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6599:35:5"
                  },
                  "returnParameters": {
                    "id": 516,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 515,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 524,
                        "src": "6653:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 514,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6653:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6652:14:5"
                  },
                  "scope": 591,
                  "src": "6570:198:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 558,
                    "nodeType": "Block",
                    "src": "7109:232:5",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 538,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 527,
                                  "src": "7138:6:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 537,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "7127:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 539,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7127:18:5",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 540,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7147:40:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                "typeString": "literal_string \"Address: delegate call to non-contract\""
                              },
                              "value": "Address: delegate call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                                "typeString": "literal_string \"Address: delegate call to non-contract\""
                              }
                            ],
                            "id": 536,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "7119:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7119:69:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 542,
                        "nodeType": "ExpressionStatement",
                        "src": "7119:69:5"
                      },
                      {
                        "assignments": [
                          544,
                          546
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 544,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "7205:7:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 558,
                            "src": "7200:12:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 543,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7200:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 546,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "7227:10:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 558,
                            "src": "7214:23:5",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 545,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "7214:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 551,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 549,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 529,
                              "src": "7261:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 547,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 527,
                              "src": "7241:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "7241:19:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7241:25:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7199:67:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 553,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 544,
                              "src": "7300:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 554,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 546,
                              "src": "7309:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 555,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 531,
                              "src": "7321:12:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 552,
                            "name": "verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 590,
                            "src": "7283:16:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7283:51:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 535,
                        "id": 557,
                        "nodeType": "Return",
                        "src": "7276:58:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 525,
                    "nodeType": "StructuredDocumentation",
                    "src": "6774:175:5",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
                  },
                  "id": 559,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "6963:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 527,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "7001:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 559,
                        "src": "6993:14:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 526,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6993:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 529,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "7030:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 559,
                        "src": "7017:17:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 528,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7017:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 531,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "7058:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 559,
                        "src": "7044:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 530,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7044:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6983:93:5"
                  },
                  "returnParameters": {
                    "id": 535,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 534,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 559,
                        "src": "7095:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 533,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7095:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7094:14:5"
                  },
                  "scope": 591,
                  "src": "6954:387:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 589,
                    "nodeType": "Block",
                    "src": "7721:532:5",
                    "statements": [
                      {
                        "condition": {
                          "id": 571,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 562,
                          "src": "7735:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 587,
                          "nodeType": "Block",
                          "src": "7792:455:5",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 575,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 564,
                                    "src": "7876:10:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 576,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "7876:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 577,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7896:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7876:21:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 585,
                                "nodeType": "Block",
                                "src": "8184:53:5",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 582,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 566,
                                          "src": "8209:12:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 581,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "8202:6:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 583,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8202:20:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 584,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8202:20:5"
                                  }
                                ]
                              },
                              "id": 586,
                              "nodeType": "IfStatement",
                              "src": "7872:365:5",
                              "trueBody": {
                                "id": 580,
                                "nodeType": "Block",
                                "src": "7899:279:5",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "8019:145:5",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "8041:40:5",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "8070:10:5"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "8064:5:5"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8064:17:5"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "8045:15:5",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "8113:2:5",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "8117:10:5"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "8109:3:5"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "8109:19:5"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "8130:15:5"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "8102:6:5"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "8102:44:5"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "8102:44:5"
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 564,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "8070:10:5",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 564,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "8117:10:5",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 579,
                                    "nodeType": "InlineAssembly",
                                    "src": "8010:154:5"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 588,
                        "nodeType": "IfStatement",
                        "src": "7731:516:5",
                        "trueBody": {
                          "id": 574,
                          "nodeType": "Block",
                          "src": "7744:42:5",
                          "statements": [
                            {
                              "expression": {
                                "id": 572,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 564,
                                "src": "7765:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 570,
                              "id": 573,
                              "nodeType": "Return",
                              "src": "7758:17:5"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 560,
                    "nodeType": "StructuredDocumentation",
                    "src": "7347:209:5",
                    "text": " @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"
                  },
                  "id": 590,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResult",
                  "nameLocation": "7570:16:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 562,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "7601:7:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 590,
                        "src": "7596:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 561,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7596:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 564,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "7631:10:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 590,
                        "src": "7618:23:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 563,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7618:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 566,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nameLocation": "7665:12:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 590,
                        "src": "7651:26:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 565,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7651:6:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7586:97:5"
                  },
                  "returnParameters": {
                    "id": 570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 569,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 590,
                        "src": "7707:12:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 568,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "7707:5:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7706:14:5"
                  },
                  "scope": 591,
                  "src": "7561:692:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 592,
              "src": "194:8061:5",
              "usedErrors": []
            }
          ],
          "src": "101:8155:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
          "exportedSymbols": {
            "Context": [
              613
            ]
          },
          "id": 614,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 593,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "86:23:6"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 594,
                "nodeType": "StructuredDocumentation",
                "src": "111:496:6",
                "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
              },
              "fullyImplemented": true,
              "id": 613,
              "linearizedBaseContracts": [
                613
              ],
              "name": "Context",
              "nameLocation": "626:7:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 602,
                    "nodeType": "Block",
                    "src": "702:34:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 599,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "719:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "719:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 598,
                        "id": 601,
                        "nodeType": "Return",
                        "src": "712:17:6"
                      }
                    ]
                  },
                  "id": 603,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nameLocation": "649:10:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 595,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "659:2:6"
                  },
                  "returnParameters": {
                    "id": 598,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 597,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 603,
                        "src": "693:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 596,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "693:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "692:9:6"
                  },
                  "scope": 613,
                  "src": "640:96:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 611,
                    "nodeType": "Block",
                    "src": "809:32:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 608,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "826:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "826:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 607,
                        "id": 610,
                        "nodeType": "Return",
                        "src": "819:15:6"
                      }
                    ]
                  },
                  "id": 612,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nameLocation": "751:8:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 604,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "759:2:6"
                  },
                  "returnParameters": {
                    "id": 607,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 606,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 612,
                        "src": "793:14:6",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 605,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "793:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "792:16:6"
                  },
                  "scope": 613,
                  "src": "742:99:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 614,
              "src": "608:235:6",
              "usedErrors": []
            }
          ],
          "src": "86:758:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "exportedSymbols": {
            "Strings": [
              816
            ]
          },
          "id": 817,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 615,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "86:23:7"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 616,
                "nodeType": "StructuredDocumentation",
                "src": "111:34:7",
                "text": " @dev String operations."
              },
              "fullyImplemented": true,
              "id": 816,
              "linearizedBaseContracts": [
                816
              ],
              "name": "Strings",
              "nameLocation": "154:7:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 619,
                  "mutability": "constant",
                  "name": "_HEX_SYMBOLS",
                  "nameLocation": "193:12:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 816,
                  "src": "168:58:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes16",
                    "typeString": "bytes16"
                  },
                  "typeName": {
                    "id": 617,
                    "name": "bytes16",
                    "nodeType": "ElementaryTypeName",
                    "src": "168:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes16",
                      "typeString": "bytes16"
                    }
                  },
                  "value": {
                    "hexValue": "30313233343536373839616263646566",
                    "id": 618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "208:18:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
                      "typeString": "literal_string \"0123456789abcdef\""
                    },
                    "value": "0123456789abcdef"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 697,
                    "nodeType": "Block",
                    "src": "399:632:7",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 627,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 622,
                            "src": "601:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "610:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "601:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 633,
                        "nodeType": "IfStatement",
                        "src": "597:51:7",
                        "trueBody": {
                          "id": 632,
                          "nodeType": "Block",
                          "src": "613:35:7",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 630,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "634:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                                  "typeString": "literal_string \"0\""
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 626,
                              "id": 631,
                              "nodeType": "Return",
                              "src": "627:10:7"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          635
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 635,
                            "mutability": "mutable",
                            "name": "temp",
                            "nameLocation": "665:4:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 697,
                            "src": "657:12:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 634,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "657:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 637,
                        "initialValue": {
                          "id": 636,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 622,
                          "src": "672:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "657:20:7"
                      },
                      {
                        "assignments": [
                          639
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 639,
                            "mutability": "mutable",
                            "name": "digits",
                            "nameLocation": "695:6:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 697,
                            "src": "687:14:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 638,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "687:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 640,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "687:14:7"
                      },
                      {
                        "body": {
                          "id": 651,
                          "nodeType": "Block",
                          "src": "729:57:7",
                          "statements": [
                            {
                              "expression": {
                                "id": 645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "743:8:7",
                                "subExpression": {
                                  "id": 644,
                                  "name": "digits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 639,
                                  "src": "743:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 646,
                              "nodeType": "ExpressionStatement",
                              "src": "743:8:7"
                            },
                            {
                              "expression": {
                                "id": 649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 647,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 635,
                                  "src": "765:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "/=",
                                "rightHandSide": {
                                  "hexValue": "3130",
                                  "id": 648,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "773:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "src": "765:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 650,
                              "nodeType": "ExpressionStatement",
                              "src": "765:10:7"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 641,
                            "name": "temp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 635,
                            "src": "718:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "726:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "718:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 652,
                        "nodeType": "WhileStatement",
                        "src": "711:75:7"
                      },
                      {
                        "assignments": [
                          654
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 654,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "808:6:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 697,
                            "src": "795:19:7",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 653,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "795:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 659,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 657,
                              "name": "digits",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 639,
                              "src": "827:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "817:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 655,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "821:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "817:17:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "795:39:7"
                      },
                      {
                        "body": {
                          "id": 690,
                          "nodeType": "Block",
                          "src": "863:131:7",
                          "statements": [
                            {
                              "expression": {
                                "id": 665,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 663,
                                  "name": "digits",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 639,
                                  "src": "877:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 664,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "887:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "877:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 666,
                              "nodeType": "ExpressionStatement",
                              "src": "877:11:7"
                            },
                            {
                              "expression": {
                                "id": 684,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 667,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 654,
                                    "src": "902:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 669,
                                  "indexExpression": {
                                    "id": 668,
                                    "name": "digits",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 639,
                                    "src": "909:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "902:14:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 681,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "3438",
                                            "id": 674,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "932:2:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_48_by_1",
                                              "typeString": "int_const 48"
                                            },
                                            "value": "48"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 679,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 677,
                                                  "name": "value",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 622,
                                                  "src": "945:5:7",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "%",
                                                "rightExpression": {
                                                  "hexValue": "3130",
                                                  "id": 678,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "953:2:7",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_10_by_1",
                                                    "typeString": "int_const 10"
                                                  },
                                                  "value": "10"
                                                },
                                                "src": "945:10:7",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "id": 676,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "937:7:7",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint256_$",
                                                "typeString": "type(uint256)"
                                              },
                                              "typeName": {
                                                "id": 675,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "937:7:7",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 680,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "937:19:7",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "932:24:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 673,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "926:5:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint8_$",
                                          "typeString": "type(uint8)"
                                        },
                                        "typeName": {
                                          "id": 672,
                                          "name": "uint8",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "926:5:7",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 682,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "926:31:7",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "id": 671,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "919:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes1_$",
                                      "typeString": "type(bytes1)"
                                    },
                                    "typeName": {
                                      "id": 670,
                                      "name": "bytes1",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "919:6:7",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 683,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "919:39:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "902:56:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 685,
                              "nodeType": "ExpressionStatement",
                              "src": "902:56:7"
                            },
                            {
                              "expression": {
                                "id": 688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 686,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 622,
                                  "src": "972:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "/=",
                                "rightHandSide": {
                                  "hexValue": "3130",
                                  "id": 687,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "981:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "src": "972:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 689,
                              "nodeType": "ExpressionStatement",
                              "src": "972:11:7"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 660,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 622,
                            "src": "851:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 661,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "860:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "851:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 691,
                        "nodeType": "WhileStatement",
                        "src": "844:150:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 694,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 654,
                              "src": "1017:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1010:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 692,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1010:6:7",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 695,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1010:14:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 626,
                        "id": 696,
                        "nodeType": "Return",
                        "src": "1003:21:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 620,
                    "nodeType": "StructuredDocumentation",
                    "src": "233:90:7",
                    "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
                  },
                  "id": 698,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "337:8:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 622,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "354:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 698,
                        "src": "346:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 621,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "346:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "345:15:7"
                  },
                  "returnParameters": {
                    "id": 626,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 625,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 698,
                        "src": "384:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 624,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "384:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "383:15:7"
                  },
                  "scope": 816,
                  "src": "328:703:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 738,
                    "nodeType": "Block",
                    "src": "1210:255:7",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 706,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 701,
                            "src": "1224:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 707,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1233:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1224:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 712,
                        "nodeType": "IfStatement",
                        "src": "1220:54:7",
                        "trueBody": {
                          "id": 711,
                          "nodeType": "Block",
                          "src": "1236:38:7",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30783030",
                                "id": 709,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1257:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fae64141728105692eac6031e8a4",
                                  "typeString": "literal_string \"0x00\""
                                },
                                "value": "0x00"
                              },
                              "functionReturnParameters": 705,
                              "id": 710,
                              "nodeType": "Return",
                              "src": "1250:13:7"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          714
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 714,
                            "mutability": "mutable",
                            "name": "temp",
                            "nameLocation": "1291:4:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 738,
                            "src": "1283:12:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 713,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1283:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 716,
                        "initialValue": {
                          "id": 715,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 701,
                          "src": "1298:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1283:20:7"
                      },
                      {
                        "assignments": [
                          718
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 718,
                            "mutability": "mutable",
                            "name": "length",
                            "nameLocation": "1321:6:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 738,
                            "src": "1313:14:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 717,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1313:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 720,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1330:1:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1313:18:7"
                      },
                      {
                        "body": {
                          "id": 731,
                          "nodeType": "Block",
                          "src": "1359:57:7",
                          "statements": [
                            {
                              "expression": {
                                "id": 725,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1373:8:7",
                                "subExpression": {
                                  "id": 724,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 718,
                                  "src": "1373:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 726,
                              "nodeType": "ExpressionStatement",
                              "src": "1373:8:7"
                            },
                            {
                              "expression": {
                                "id": 729,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 727,
                                  "name": "temp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 714,
                                  "src": "1395:4:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "38",
                                  "id": 728,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1404:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "1395:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 730,
                              "nodeType": "ExpressionStatement",
                              "src": "1395:10:7"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 723,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 721,
                            "name": "temp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 714,
                            "src": "1348:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1356:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1348:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 732,
                        "nodeType": "WhileStatement",
                        "src": "1341:75:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 734,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 701,
                              "src": "1444:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 735,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 718,
                              "src": "1451:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 733,
                            "name": "toHexString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              739,
                              815
                            ],
                            "referencedDeclaration": 815,
                            "src": "1432:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (string memory)"
                            }
                          },
                          "id": 736,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1432:26:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 705,
                        "id": 737,
                        "nodeType": "Return",
                        "src": "1425:33:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 699,
                    "nodeType": "StructuredDocumentation",
                    "src": "1037:94:7",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
                  },
                  "id": 739,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1145:11:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 701,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1165:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 739,
                        "src": "1157:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 700,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1157:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1156:15:7"
                  },
                  "returnParameters": {
                    "id": 705,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 704,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 739,
                        "src": "1195:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 703,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1195:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1194:15:7"
                  },
                  "scope": 816,
                  "src": "1136:329:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 814,
                    "nodeType": "Block",
                    "src": "1678:351:7",
                    "statements": [
                      {
                        "assignments": [
                          750
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 750,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "1701:6:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 814,
                            "src": "1688:19:7",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 749,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1688:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 759,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 753,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1720:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 754,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 744,
                                  "src": "1724:6:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1720:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 756,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1733:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "1720:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "1710:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 751,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1714:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1710:25:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1688:47:7"
                      },
                      {
                        "expression": {
                          "id": 764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 760,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 750,
                              "src": "1745:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 762,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 761,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1752:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1745:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1757:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                              "typeString": "literal_string \"0\""
                            },
                            "value": "0"
                          },
                          "src": "1745:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 765,
                        "nodeType": "ExpressionStatement",
                        "src": "1745:15:7"
                      },
                      {
                        "expression": {
                          "id": 770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 766,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 750,
                              "src": "1770:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 768,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 767,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1777:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1770:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "78",
                            "id": 769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1782:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
                              "typeString": "literal_string \"x\""
                            },
                            "value": "x"
                          },
                          "src": "1770:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 771,
                        "nodeType": "ExpressionStatement",
                        "src": "1770:15:7"
                      },
                      {
                        "body": {
                          "id": 800,
                          "nodeType": "Block",
                          "src": "1840:87:7",
                          "statements": [
                            {
                              "expression": {
                                "id": 794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 786,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 750,
                                    "src": "1854:6:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 788,
                                  "indexExpression": {
                                    "id": 787,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 773,
                                    "src": "1861:1:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1854:9:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 789,
                                    "name": "_HEX_SYMBOLS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 619,
                                    "src": "1866:12:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  },
                                  "id": 793,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 792,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 790,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 742,
                                      "src": "1879:5:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 791,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1887:3:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "1879:11:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1866:25:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "1854:37:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 795,
                              "nodeType": "ExpressionStatement",
                              "src": "1854:37:7"
                            },
                            {
                              "expression": {
                                "id": 798,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 796,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 742,
                                  "src": "1905:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 797,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1915:1:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "1905:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 799,
                              "nodeType": "ExpressionStatement",
                              "src": "1905:11:7"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 780,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 773,
                            "src": "1828:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1832:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "1828:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 801,
                        "initializationExpression": {
                          "assignments": [
                            773
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 773,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "1808:1:7",
                              "nodeType": "VariableDeclaration",
                              "scope": 801,
                              "src": "1800:9:7",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 772,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1800:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 779,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 778,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 776,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1812:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 775,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 744,
                                "src": "1816:6:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1812:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 777,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1825:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1812:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "1800:26:7"
                        },
                        "loopExpression": {
                          "expression": {
                            "id": 784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "1835:3:7",
                            "subExpression": {
                              "id": 783,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 773,
                              "src": "1837:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 785,
                          "nodeType": "ExpressionStatement",
                          "src": "1835:3:7"
                        },
                        "nodeType": "ForStatement",
                        "src": "1795:132:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 805,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 803,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 742,
                                "src": "1944:5:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 804,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1953:1:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "1944:10:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
                              "id": 806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1956:34:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              },
                              "value": "Strings: hex length insufficient"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
                                "typeString": "literal_string \"Strings: hex length insufficient\""
                              }
                            ],
                            "id": 802,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1936:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1936:55:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 808,
                        "nodeType": "ExpressionStatement",
                        "src": "1936:55:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 811,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 750,
                              "src": "2015:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 810,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2008:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 809,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2008:6:7",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2008:14:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 748,
                        "id": 813,
                        "nodeType": "Return",
                        "src": "2001:21:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 740,
                    "nodeType": "StructuredDocumentation",
                    "src": "1471:112:7",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
                  },
                  "id": 815,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "1597:11:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 742,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1617:5:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 815,
                        "src": "1609:13:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 741,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1609:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 744,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "1632:6:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 815,
                        "src": "1624:14:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 743,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1624:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1608:31:7"
                  },
                  "returnParameters": {
                    "id": 748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 747,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 815,
                        "src": "1663:13:7",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 746,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1663:6:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1662:15:7"
                  },
                  "scope": 816,
                  "src": "1588:441:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 817,
              "src": "146:1885:7",
              "usedErrors": []
            }
          ],
          "src": "86:1946:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts/utils/introspection/ERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
          "exportedSymbols": {
            "ERC165": [
              840
            ],
            "IERC165": [
              852
            ]
          },
          "id": 841,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 818,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "99:23:8"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "./IERC165.sol",
              "id": 819,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 841,
              "sourceUnit": 853,
              "src": "124:23:8",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 821,
                    "name": "IERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 852,
                    "src": "754:7:8"
                  },
                  "id": 822,
                  "nodeType": "InheritanceSpecifier",
                  "src": "754:7:8"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 820,
                "nodeType": "StructuredDocumentation",
                "src": "149:576:8",
                "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."
              },
              "fullyImplemented": true,
              "id": 840,
              "linearizedBaseContracts": [
                840,
                852
              ],
              "name": "ERC165",
              "nameLocation": "744:6:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    851
                  ],
                  "body": {
                    "id": 838,
                    "nodeType": "Block",
                    "src": "920:64:8",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 831,
                            "name": "interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 825,
                            "src": "937:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 833,
                                  "name": "IERC165",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 852,
                                  "src": "957:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$852_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$852_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                ],
                                "id": 832,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "952:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "952:13:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$852",
                                "typeString": "type(contract IERC165)"
                              }
                            },
                            "id": 835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "interfaceId",
                            "nodeType": "MemberAccess",
                            "src": "952:25:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "937:40:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 830,
                        "id": 837,
                        "nodeType": "Return",
                        "src": "930:47:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 823,
                    "nodeType": "StructuredDocumentation",
                    "src": "768:56:8",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 839,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "838:17:8",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 827,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "896:8:8"
                  },
                  "parameters": {
                    "id": 826,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 825,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "863:11:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 839,
                        "src": "856:18:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 824,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "856:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "855:20:8"
                  },
                  "returnParameters": {
                    "id": 830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 829,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 839,
                        "src": "914:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 828,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "913:6:8"
                  },
                  "scope": 840,
                  "src": "829:155:8",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 841,
              "src": "726:260:8",
              "usedErrors": []
            }
          ],
          "src": "99:888:8"
        },
        "id": 8
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              852
            ]
          },
          "id": 853,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 842,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "100:23:9"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 843,
                "nodeType": "StructuredDocumentation",
                "src": "125:279:9",
                "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
              },
              "fullyImplemented": false,
              "id": 852,
              "linearizedBaseContracts": [
                852
              ],
              "name": "IERC165",
              "nameLocation": "415:7:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 844,
                    "nodeType": "StructuredDocumentation",
                    "src": "429:340:9",
                    "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 851,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "783:17:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 846,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "808:11:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 851,
                        "src": "801:18:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 845,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "801:6:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "800:20:9"
                  },
                  "returnParameters": {
                    "id": 850,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 849,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 851,
                        "src": "844:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 848,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "844:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "843:6:9"
                  },
                  "scope": 852,
                  "src": "774:76:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 853,
              "src": "405:447:9",
              "usedErrors": []
            }
          ],
          "src": "100:753:9"
        },
        "id": 9
      },
      "base64-sol/base64.sol": {
        "ast": {
          "absolutePath": "base64-sol/base64.sol",
          "exportedSymbols": {
            "Base64": [
              967
            ]
          },
          "id": 968,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 854,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "33:24:10"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 855,
                "nodeType": "StructuredDocumentation",
                "src": "59:127:10",
                "text": "@title Base64\n @author Brecht Devos - <brecht@loopring.org>\n @notice Provides functions for encoding/decoding base64"
              },
              "fullyImplemented": true,
              "id": 967,
              "linearizedBaseContracts": [
                967
              ],
              "name": "Base64",
              "nameLocation": "194:6:10",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 858,
                  "mutability": "constant",
                  "name": "TABLE_ENCODE",
                  "nameLocation": "232:12:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 967,
                  "src": "207:106:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 856,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "207:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f",
                    "id": 857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "247:66:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_84d8a590de33e00cbdc16e1f28c3506f5ec15c599fab9a6a4bcd575cc2f110ce",
                      "typeString": "literal_string \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\""
                    },
                    "value": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 861,
                  "mutability": "constant",
                  "name": "TABLE_DECODE",
                  "nameLocation": "344:12:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 967,
                  "src": "319:451:10",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 859,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "319:5:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": {
                    "hexValue": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e0000003f3435363738393a3b3c3d00000000000000000102030405060708090a0b0c0d0e0f101112131415161718190000000000001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000",
                    "id": 860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "hexString",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "359:411:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cbed483d4f9f83dd52b06773fd58dd8723113252a85374752ef109e22dfa50f9",
                      "typeString": "literal_string hex\"000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e0000003f3435363738393a3b3c3d00000000000000000102030405060708090a0b0c0d0e0f101112131415161718190000000000001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000\""
                    },
                    "value": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000>\u0000\u0000\u0000?456789:;<=\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u0000\u0000\u0000\u0000\u0000\u0000\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123\u0000\u0000\u0000\u0000\u0000"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 904,
                    "nodeType": "Block",
                    "src": "850:1788:10",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 868,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 863,
                              "src": "864:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 869,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "864:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 870,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "879:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "864:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 874,
                        "nodeType": "IfStatement",
                        "src": "860:31:10",
                        "trueBody": {
                          "expression": {
                            "hexValue": "",
                            "id": 872,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "889:2:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "functionReturnParameters": 867,
                          "id": 873,
                          "nodeType": "Return",
                          "src": "882:9:10"
                        }
                      },
                      {
                        "assignments": [
                          876
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 876,
                            "mutability": "mutable",
                            "name": "table",
                            "nameLocation": "954:5:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 904,
                            "src": "940:19:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 875,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "940:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 878,
                        "initialValue": {
                          "id": 877,
                          "name": "TABLE_ENCODE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 858,
                          "src": "962:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "940:34:10"
                      },
                      {
                        "assignments": [
                          880
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 880,
                            "mutability": "mutable",
                            "name": "encodedLen",
                            "nameLocation": "1031:10:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 904,
                            "src": "1023:18:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 879,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1023:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 891,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "34",
                            "id": 881,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1044:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 888,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 885,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "expression": {
                                          "id": 882,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 863,
                                          "src": "1050:4:10",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 883,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "length",
                                        "nodeType": "MemberAccess",
                                        "src": "1050:11:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "hexValue": "32",
                                        "id": 884,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1064:1:10",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "1050:15:10",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 886,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1049:17:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 887,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1069:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "1049:21:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 889,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1048:23:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1044:27:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1023:48:10"
                      },
                      {
                        "assignments": [
                          893
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 893,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "1165:6:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 904,
                            "src": "1151:20:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 892,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1151:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 900,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 896,
                                "name": "encodedLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 880,
                                "src": "1185:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "3332",
                                "id": 897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1198:2:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "1185:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "1174:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (string memory)"
                            },
                            "typeName": {
                              "id": 894,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1178:6:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            }
                          },
                          "id": 899,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1174:27:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1151:50:10"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "1221:1387:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nodeType": "YulIdentifier",
                                    "src": "1286:6:10"
                                  },
                                  {
                                    "name": "encodedLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "1294:10:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1279:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1279:26:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1279:26:10"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1359:29:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "table",
                                    "nodeType": "YulIdentifier",
                                    "src": "1379:5:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1386:1:10",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1375:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1375:13:10"
                              },
                              "variables": [
                                {
                                  "name": "tablePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1363:8:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1427:19:10",
                              "value": {
                                "name": "data",
                                "nodeType": "YulIdentifier",
                                "src": "1442:4:10"
                              },
                              "variables": [
                                {
                                  "name": "dataPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1431:7:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1459:39:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dataPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1477:7:10"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "1492:4:10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "1486:5:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1486:11:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1473:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1473:25:10"
                              },
                              "variables": [
                                {
                                  "name": "endPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1463:6:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "1556:32:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nodeType": "YulIdentifier",
                                    "src": "1577:6:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1585:2:10",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1573:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1573:15:10"
                              },
                              "variables": [
                                {
                                  "name": "resultPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "1560:9:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1697:697:10",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1747:26:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dataPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1762:7:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1771:1:10",
                                          "type": "",
                                          "value": "3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1758:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1758:15:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dataPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1747:7:10"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1790:27:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dataPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1809:7:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "1803:5:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1803:14:10"
                                    },
                                    "variables": [
                                      {
                                        "name": "input",
                                        "nodeType": "YulTypedName",
                                        "src": "1794:5:10",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1881:9:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tablePtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1902:8:10"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "kind": "number",
                                                          "nodeType": "YulLiteral",
                                                          "src": "1920:2:10",
                                                          "type": "",
                                                          "value": "18"
                                                        },
                                                        {
                                                          "name": "input",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1924:5:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "shr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1916:3:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "1916:14:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1932:4:10",
                                                      "type": "",
                                                      "value": "0x3F"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1912:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1912:25:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1898:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1898:40:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "1892:5:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1892:47:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore8",
                                        "nodeType": "YulIdentifier",
                                        "src": "1873:7:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1873:67:10"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1873:67:10"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1957:30:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "1974:9:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1985:1:10",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1970:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1970:17:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "resultPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "1957:9:10"
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2012:9:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tablePtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2033:8:10"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "kind": "number",
                                                          "nodeType": "YulLiteral",
                                                          "src": "2051:2:10",
                                                          "type": "",
                                                          "value": "12"
                                                        },
                                                        {
                                                          "name": "input",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2055:5:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "shr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2047:3:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "2047:14:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "2063:4:10",
                                                      "type": "",
                                                      "value": "0x3F"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2043:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2043:25:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2029:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2029:40:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2023:5:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2023:47:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore8",
                                        "nodeType": "YulIdentifier",
                                        "src": "2004:7:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2004:67:10"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2004:67:10"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2088:30:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2105:9:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2116:1:10",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2101:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2101:17:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "resultPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2088:9:10"
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2143:9:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tablePtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2164:8:10"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "kind": "number",
                                                          "nodeType": "YulLiteral",
                                                          "src": "2183:1:10",
                                                          "type": "",
                                                          "value": "6"
                                                        },
                                                        {
                                                          "name": "input",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2186:5:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "shr",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2178:3:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "2178:14:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "2194:4:10",
                                                      "type": "",
                                                      "value": "0x3F"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2174:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2174:25:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2160:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2160:40:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2154:5:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2154:47:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore8",
                                        "nodeType": "YulIdentifier",
                                        "src": "2135:7:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2135:67:10"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2135:67:10"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2219:30:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2236:9:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2247:1:10",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2232:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2232:17:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "resultPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2219:9:10"
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2274:9:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "tablePtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2295:8:10"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "input",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2317:5:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "2325:4:10",
                                                      "type": "",
                                                      "value": "0x3F"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2305:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "2305:25:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "2291:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2291:40:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "2285:5:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2285:47:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore8",
                                        "nodeType": "YulIdentifier",
                                        "src": "2266:7:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2266:67:10"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2266:67:10"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "2350:30:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "2367:9:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2378:1:10",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "2363:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2363:17:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "resultPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2350:9:10"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "dataPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1665:7:10"
                                  },
                                  {
                                    "name": "endPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1674:6:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1662:2:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1662:19:10"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1682:2:10",
                                "statements": []
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1659:2:10",
                                "statements": []
                              },
                              "src": "1655:739:10"
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "2486:47:10",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "resultPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2499:9:10"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2510:1:10",
                                                  "type": "",
                                                  "value": "2"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "2495:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2495:17:10"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2518:3:10",
                                                  "type": "",
                                                  "value": "240"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2523:6:10",
                                                  "type": "",
                                                  "value": "0x3d3d"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "2514:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2514:16:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2488:6:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2488:43:10"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "2488:43:10"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "2479:54:10",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2484:1:10",
                                    "type": "",
                                    "value": "1"
                                  }
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "2553:45:10",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "resultPtr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2566:9:10"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2577:1:10",
                                                  "type": "",
                                                  "value": "1"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "sub",
                                                "nodeType": "YulIdentifier",
                                                "src": "2562:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2562:17:10"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2585:3:10",
                                                  "type": "",
                                                  "value": "248"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "2590:4:10",
                                                  "type": "",
                                                  "value": "0x3d"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "2581:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "2581:14:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore",
                                            "nodeType": "YulIdentifier",
                                            "src": "2555:6:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "2555:41:10"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "2555:41:10"
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "2546:52:10",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2551:1:10",
                                    "type": "",
                                    "value": "2"
                                  }
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "2457:4:10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "2451:5:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2451:11:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2464:1:10",
                                    "type": "",
                                    "value": "3"
                                  }
                                ],
                                "functionName": {
                                  "name": "mod",
                                  "nodeType": "YulIdentifier",
                                  "src": "2447:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2447:19:10"
                              },
                              "nodeType": "YulSwitch",
                              "src": "2440:158:10"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 863,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1442:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 863,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1492:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 863,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2457:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 880,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1294:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 893,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1286:6:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 893,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1577:6:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 876,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1379:5:10",
                            "valueSize": 1
                          }
                        ],
                        "id": 901,
                        "nodeType": "InlineAssembly",
                        "src": "1212:1396:10"
                      },
                      {
                        "expression": {
                          "id": 902,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 893,
                          "src": "2625:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 867,
                        "id": 903,
                        "nodeType": "Return",
                        "src": "2618:13:10"
                      }
                    ]
                  },
                  "id": 905,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "encode",
                  "nameLocation": "786:6:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 863,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "806:4:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 905,
                        "src": "793:17:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 862,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "793:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "792:19:10"
                  },
                  "returnParameters": {
                    "id": 867,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 866,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 905,
                        "src": "835:13:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 865,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "835:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "834:15:10"
                  },
                  "scope": 967,
                  "src": "777:1861:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 965,
                    "nodeType": "Block",
                    "src": "2718:2104:10",
                    "statements": [
                      {
                        "assignments": [
                          913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 913,
                            "mutability": "mutable",
                            "name": "data",
                            "nameLocation": "2741:4:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 965,
                            "src": "2728:17:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 912,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2728:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 918,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 916,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 907,
                              "src": "2754:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2748:5:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 914,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2748:5:10",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2748:12:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2728:32:10"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 922,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 919,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "2775:4:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 920,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2775:11:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 921,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2790:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2775:16:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 928,
                        "nodeType": "IfStatement",
                        "src": "2771:41:10",
                        "trueBody": {
                          "expression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2810:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "NewExpression",
                              "src": "2800:9:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function (uint256) pure returns (bytes memory)"
                              },
                              "typeName": {
                                "id": 923,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "2804:5:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_storage_ptr",
                                  "typeString": "bytes"
                                }
                              }
                            },
                            "id": 926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2800:12:10",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "functionReturnParameters": 911,
                          "id": 927,
                          "nodeType": "Return",
                          "src": "2793:19:10"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 933,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 930,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 913,
                                    "src": "2830:4:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 931,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "2830:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "%",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 932,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2844:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2830:15:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 934,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2849:1:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2830:20:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "696e76616c696420626173653634206465636f64657220696e707574",
                              "id": 936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2852:30:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b899645e29043a8d30000fb8ed0252b5c4f6f5f09672aefa374ee368d324bb89",
                                "typeString": "literal_string \"invalid base64 decoder input\""
                              },
                              "value": "invalid base64 decoder input"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b899645e29043a8d30000fb8ed0252b5c4f6f5f09672aefa374ee368d324bb89",
                                "typeString": "literal_string \"invalid base64 decoder input\""
                              }
                            ],
                            "id": 929,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2822:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2822:61:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 938,
                        "nodeType": "ExpressionStatement",
                        "src": "2822:61:10"
                      },
                      {
                        "assignments": [
                          940
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 940,
                            "mutability": "mutable",
                            "name": "table",
                            "nameLocation": "2945:5:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 965,
                            "src": "2932:18:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 939,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2932:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 942,
                        "initialValue": {
                          "id": 941,
                          "name": "TABLE_DECODE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 861,
                          "src": "2953:12:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2932:33:10"
                      },
                      {
                        "assignments": [
                          944
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 944,
                            "mutability": "mutable",
                            "name": "decodedLen",
                            "nameLocation": "3032:10:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 965,
                            "src": "3024:18:10",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 943,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3024:7:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 952,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 948,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 945,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 913,
                                    "src": "3046:4:10",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 946,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "3046:11:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 947,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3060:1:10",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "3046:15:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 949,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3045:17:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "33",
                            "id": 950,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3065:1:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "src": "3045:21:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3024:42:10"
                      },
                      {
                        "assignments": [
                          954
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 954,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "3159:6:10",
                            "nodeType": "VariableDeclaration",
                            "scope": 965,
                            "src": "3146:19:10",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 953,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3146:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 961,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 957,
                                "name": "decodedLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 944,
                                "src": "3178:10:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "3332",
                                "id": 958,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3191:2:10",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "3178:15:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 956,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "3168:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 955,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3172:5:10",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 960,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3168:26:10",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3146:48:10"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3214:1578:10",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3260:46:10",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3287:4:10"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "data",
                                            "nodeType": "YulIdentifier",
                                            "src": "3299:4:10"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "3293:5:10"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "3293:11:10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3283:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3283:22:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3277:5:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3277:29:10"
                              },
                              "variables": [
                                {
                                  "name": "lastBytes",
                                  "nodeType": "YulTypedName",
                                  "src": "3264:9:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "3353:191:10",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "3371:32:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "decodedLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "3389:10:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3401:1:10",
                                          "type": "",
                                          "value": "1"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "3385:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3385:18:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "decodedLen",
                                        "nodeType": "YulIdentifier",
                                        "src": "3371:10:10"
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "3458:72:10",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "3480:32:10",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "decodedLen",
                                                "nodeType": "YulIdentifier",
                                                "src": "3498:10:10"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3510:1:10",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "3494:3:10"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "3494:18:10"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "decodedLen",
                                              "nodeType": "YulIdentifier",
                                              "src": "3480:10:10"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "lastBytes",
                                              "nodeType": "YulIdentifier",
                                              "src": "3430:9:10"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "3441:6:10",
                                              "type": "",
                                              "value": "0xFFFF"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "and",
                                            "nodeType": "YulIdentifier",
                                            "src": "3426:3:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "3426:22:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3450:6:10",
                                          "type": "",
                                          "value": "0x3d3d"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "eq",
                                        "nodeType": "YulIdentifier",
                                        "src": "3423:2:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3423:34:10"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "3420:2:10"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "lastBytes",
                                        "nodeType": "YulIdentifier",
                                        "src": "3329:9:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3340:4:10",
                                        "type": "",
                                        "value": "0xFF"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "3325:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3325:20:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3347:4:10",
                                    "type": "",
                                    "value": "0x3d"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "3322:2:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3322:30:10"
                              },
                              "nodeType": "YulIf",
                              "src": "3319:2:10"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nodeType": "YulIdentifier",
                                    "src": "3609:6:10"
                                  },
                                  {
                                    "name": "decodedLen",
                                    "nodeType": "YulIdentifier",
                                    "src": "3617:10:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "3602:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3602:26:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "3602:26:10"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3682:29:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "table",
                                    "nodeType": "YulIdentifier",
                                    "src": "3702:5:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3709:1:10",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3698:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3698:13:10"
                              },
                              "variables": [
                                {
                                  "name": "tablePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3686:8:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3750:19:10",
                              "value": {
                                "name": "data",
                                "nodeType": "YulIdentifier",
                                "src": "3765:4:10"
                              },
                              "variables": [
                                {
                                  "name": "dataPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3754:7:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3782:39:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "dataPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3800:7:10"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3815:4:10"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "3809:5:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3809:11:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3796:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3796:25:10"
                              },
                              "variables": [
                                {
                                  "name": "endPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3786:6:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "3879:32:10",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nodeType": "YulIdentifier",
                                    "src": "3900:6:10"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3908:2:10",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3896:3:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3896:15:10"
                              },
                              "variables": [
                                {
                                  "name": "resultPtr",
                                  "nodeType": "YulTypedName",
                                  "src": "3883:9:10",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "4025:757:10",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4078:26:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dataPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4093:7:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4102:1:10",
                                          "type": "",
                                          "value": "4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4089:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4089:15:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "dataPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4078:7:10"
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4120:27:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "dataPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4139:7:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "4133:5:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4133:14:10"
                                    },
                                    "variables": [
                                      {
                                        "name": "input",
                                        "nodeType": "YulTypedName",
                                        "src": "4124:5:10",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "4196:473:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4266:2:10",
                                                  "type": "",
                                                  "value": "18"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "tablePtr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4284:8:10"
                                                            },
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "arguments": [
                                                                    {
                                                                      "kind": "number",
                                                                      "nodeType": "YulLiteral",
                                                                      "src": "4302:2:10",
                                                                      "type": "",
                                                                      "value": "24"
                                                                    },
                                                                    {
                                                                      "name": "input",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "4306:5:10"
                                                                    }
                                                                  ],
                                                                  "functionName": {
                                                                    "name": "shr",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4298:3:10"
                                                                  },
                                                                  "nodeType": "YulFunctionCall",
                                                                  "src": "4298:14:10"
                                                                },
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "4314:4:10",
                                                                  "type": "",
                                                                  "value": "0xFF"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "and",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4294:3:10"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "4294:25:10"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4280:3:10"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4280:40:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4274:5:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4274:47:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4323:4:10",
                                                      "type": "",
                                                      "value": "0xFF"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4270:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "4270:58:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "4262:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4262:67:10"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4358:2:10",
                                                  "type": "",
                                                  "value": "12"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "tablePtr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4376:8:10"
                                                            },
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "arguments": [
                                                                    {
                                                                      "kind": "number",
                                                                      "nodeType": "YulLiteral",
                                                                      "src": "4394:2:10",
                                                                      "type": "",
                                                                      "value": "16"
                                                                    },
                                                                    {
                                                                      "name": "input",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "4398:5:10"
                                                                    }
                                                                  ],
                                                                  "functionName": {
                                                                    "name": "shr",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4390:3:10"
                                                                  },
                                                                  "nodeType": "YulFunctionCall",
                                                                  "src": "4390:14:10"
                                                                },
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "4406:4:10",
                                                                  "type": "",
                                                                  "value": "0xFF"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "and",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4386:3:10"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "4386:25:10"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4372:3:10"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4372:40:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4366:5:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4366:47:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4415:4:10",
                                                      "type": "",
                                                      "value": "0xFF"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4362:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "4362:58:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "4354:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4354:67:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4234:3:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4234:188:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4476:1:10",
                                                  "type": "",
                                                  "value": "6"
                                                },
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "tablePtr",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4493:8:10"
                                                            },
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "arguments": [
                                                                    {
                                                                      "kind": "number",
                                                                      "nodeType": "YulLiteral",
                                                                      "src": "4512:1:10",
                                                                      "type": "",
                                                                      "value": "8"
                                                                    },
                                                                    {
                                                                      "name": "input",
                                                                      "nodeType": "YulIdentifier",
                                                                      "src": "4515:5:10"
                                                                    }
                                                                  ],
                                                                  "functionName": {
                                                                    "name": "shr",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "4507:3:10"
                                                                  },
                                                                  "nodeType": "YulFunctionCall",
                                                                  "src": "4507:14:10"
                                                                },
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "4523:4:10",
                                                                  "type": "",
                                                                  "value": "0xFF"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "and",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4503:3:10"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "4503:25:10"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4489:3:10"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4489:40:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "mload",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4483:5:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4483:47:10"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4532:4:10",
                                                      "type": "",
                                                      "value": "0xFF"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4479:3:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "4479:58:10"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "shl",
                                                "nodeType": "YulIdentifier",
                                                "src": "4471:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4471:67:10"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "name": "tablePtr",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "4585:8:10"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "input",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4607:5:10"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "4615:4:10",
                                                              "type": "",
                                                              "value": "0xFF"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "and",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4595:3:10"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4595:25:10"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "add",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4581:3:10"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4581:40:10"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mload",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4575:5:10"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "4575:47:10"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "4624:4:10",
                                                  "type": "",
                                                  "value": "0xFF"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "and",
                                                "nodeType": "YulIdentifier",
                                                "src": "4571:3:10"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "4571:58:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "4443:3:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4443:208:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4210:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4210:459:10"
                                    },
                                    "variables": [
                                      {
                                        "name": "output",
                                        "nodeType": "YulTypedName",
                                        "src": "4200:6:10",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4693:9:10"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "4708:3:10",
                                              "type": "",
                                              "value": "232"
                                            },
                                            {
                                              "name": "output",
                                              "nodeType": "YulIdentifier",
                                              "src": "4713:6:10"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "shl",
                                            "nodeType": "YulIdentifier",
                                            "src": "4704:3:10"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "4704:16:10"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "4686:6:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4686:35:10"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "4686:35:10"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "4738:30:10",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "resultPtr",
                                          "nodeType": "YulIdentifier",
                                          "src": "4755:9:10"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "4766:1:10",
                                          "type": "",
                                          "value": "3"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "4751:3:10"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "4751:17:10"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "resultPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "4738:9:10"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "dataPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "3993:7:10"
                                  },
                                  {
                                    "name": "endPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "4002:6:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "3990:2:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3990:19:10"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "4010:2:10",
                                "statements": []
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "3987:2:10",
                                "statements": []
                              },
                              "src": "3983:799:10"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 913,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3287:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 913,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3299:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 913,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3765:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 913,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3815:4:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 944,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3371:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 944,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3389:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 944,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3480:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 944,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3498:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 944,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3617:10:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 954,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3609:6:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 954,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3900:6:10",
                            "valueSize": 1
                          },
                          {
                            "declaration": 940,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3702:5:10",
                            "valueSize": 1
                          }
                        ],
                        "id": 962,
                        "nodeType": "InlineAssembly",
                        "src": "3205:1587:10"
                      },
                      {
                        "expression": {
                          "id": 963,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 954,
                          "src": "4809:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 911,
                        "id": 964,
                        "nodeType": "Return",
                        "src": "4802:13:10"
                      }
                    ]
                  },
                  "id": 966,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decode",
                  "nameLocation": "2653:6:10",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 908,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 907,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "2674:5:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 966,
                        "src": "2660:19:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 906,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2660:6:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2659:21:10"
                  },
                  "returnParameters": {
                    "id": 911,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 910,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 966,
                        "src": "2704:12:10",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 909,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2704:5:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2703:14:10"
                  },
                  "scope": 967,
                  "src": "2644:2178:10",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 968,
              "src": "186:4638:10",
              "usedErrors": []
            }
          ],
          "src": "33:4792:10"
        },
        "id": 10
      },
      "contracts/Mocks/NFT.sol": {
        "ast": {
          "absolutePath": "contracts/Mocks/NFT.sol",
          "exportedSymbols": {
            "Address": [
              591
            ],
            "ApprovalCallerNotOwnerNorApproved": [
              1158
            ],
            "ApprovalQueryForNonexistentToken": [
              1160
            ],
            "ApprovalToCurrentOwner": [
              1164
            ],
            "ApproveToCaller": [
              1162
            ],
            "AuxQueryForZeroAddress": [
              1172
            ],
            "BalanceQueryForZeroAddress": [
              1166
            ],
            "Base64": [
              967
            ],
            "BurnedQueryForZeroAddress": [
              1170
            ],
            "Context": [
              613
            ],
            "ERC165": [
              840
            ],
            "ERC721A": [
              2461
            ],
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ],
            "IERC721Enumerable": [
              269
            ],
            "IERC721Metadata": [
              296
            ],
            "IERC721Receiver": [
              238
            ],
            "MintToZeroAddress": [
              1174
            ],
            "MintZeroQuantity": [
              1176
            ],
            "MintedQueryForZeroAddress": [
              1168
            ],
            "NFT": [
              981
            ],
            "OneOfOnes": [
              1146
            ],
            "Ownable": [
              104
            ],
            "OwnerIndexOutOfBounds": [
              1178
            ],
            "OwnerQueryForNonexistentToken": [
              1180
            ],
            "Strings": [
              816
            ],
            "TokenIndexOutOfBounds": [
              1182
            ],
            "TransferCallerNotOwnerNorApproved": [
              1184
            ],
            "TransferFromIncorrectOwner": [
              1186
            ],
            "TransferToNonERC721ReceiverImplementer": [
              1188
            ],
            "TransferToZeroAddress": [
              1190
            ],
            "URIQueryForNonexistentToken": [
              1192
            ]
          },
          "id": 982,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 969,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "35:23:11"
            },
            {
              "absolutePath": "contracts/OneOfOnes.sol",
              "file": "../OneOfOnes.sol",
              "id": 970,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 982,
              "sourceUnit": 1147,
              "src": "62:26:11",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 971,
                    "name": "OneOfOnes",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1146,
                    "src": "108:9:11"
                  },
                  "id": 972,
                  "nodeType": "InheritanceSpecifier",
                  "src": "108:9:11"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 981,
              "linearizedBaseContracts": [
                981,
                1146,
                104,
                2461,
                296,
                220,
                840,
                852,
                613
              ],
              "name": "NFT",
              "nameLocation": "101:3:11",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 979,
                    "nodeType": "Block",
                    "src": "159:2:11",
                    "statements": []
                  },
                  "id": 980,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "hexValue": "4e4654",
                          "id": 975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "145:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_9c4138cd0a1311e4748f70d0fe3dc55f0f5f75e0f20db731225cbc3b8914016a",
                            "typeString": "literal_string \"NFT\""
                          },
                          "value": "NFT"
                        },
                        {
                          "hexValue": "4e4654",
                          "id": 976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "152:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_9c4138cd0a1311e4748f70d0fe3dc55f0f5f75e0f20db731225cbc3b8914016a",
                            "typeString": "literal_string \"NFT\""
                          },
                          "value": "NFT"
                        }
                      ],
                      "id": 977,
                      "kind": "baseConstructorSpecifier",
                      "modifierName": {
                        "id": 974,
                        "name": "ERC721A",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2461,
                        "src": "137:7:11"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "137:21:11"
                    }
                  ],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 973,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134:2:11"
                  },
                  "returnParameters": {
                    "id": 978,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "159:0:11"
                  },
                  "scope": 981,
                  "src": "123:38:11",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 982,
              "src": "92:72:11",
              "usedErrors": [
                1158,
                1160,
                1162,
                1164,
                1166,
                1174,
                1176,
                1180,
                1184,
                1186,
                1188,
                1190
              ]
            }
          ],
          "src": "35:129:11"
        },
        "id": 11
      },
      "contracts/OneOfOnes.sol": {
        "ast": {
          "absolutePath": "contracts/OneOfOnes.sol",
          "exportedSymbols": {
            "Address": [
              591
            ],
            "ApprovalCallerNotOwnerNorApproved": [
              1158
            ],
            "ApprovalQueryForNonexistentToken": [
              1160
            ],
            "ApprovalToCurrentOwner": [
              1164
            ],
            "ApproveToCaller": [
              1162
            ],
            "AuxQueryForZeroAddress": [
              1172
            ],
            "BalanceQueryForZeroAddress": [
              1166
            ],
            "Base64": [
              967
            ],
            "BurnedQueryForZeroAddress": [
              1170
            ],
            "Context": [
              613
            ],
            "ERC165": [
              840
            ],
            "ERC721A": [
              2461
            ],
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ],
            "IERC721Enumerable": [
              269
            ],
            "IERC721Metadata": [
              296
            ],
            "IERC721Receiver": [
              238
            ],
            "MintToZeroAddress": [
              1174
            ],
            "MintZeroQuantity": [
              1176
            ],
            "MintedQueryForZeroAddress": [
              1168
            ],
            "OneOfOnes": [
              1146
            ],
            "Ownable": [
              104
            ],
            "OwnerIndexOutOfBounds": [
              1178
            ],
            "OwnerQueryForNonexistentToken": [
              1180
            ],
            "Strings": [
              816
            ],
            "TokenIndexOutOfBounds": [
              1182
            ],
            "TransferCallerNotOwnerNorApproved": [
              1184
            ],
            "TransferFromIncorrectOwner": [
              1186
            ],
            "TransferToNonERC721ReceiverImplementer": [
              1188
            ],
            "TransferToZeroAddress": [
              1190
            ],
            "URIQueryForNonexistentToken": [
              1192
            ]
          },
          "id": 1147,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 983,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "35:23:12"
            },
            {
              "absolutePath": "base64-sol/base64.sol",
              "file": "base64-sol/base64.sol",
              "id": 984,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1147,
              "sourceUnit": 968,
              "src": "1047:31:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "erc721a/contracts/ERC721A.sol",
              "file": "erc721a/contracts/ERC721A.sol",
              "id": 985,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1147,
              "sourceUnit": 2462,
              "src": "1080:39:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
              "file": "@openzeppelin/contracts/access/Ownable.sol",
              "id": 986,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1147,
              "sourceUnit": 105,
              "src": "1121:52:12",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 987,
                    "name": "ERC721A",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2461,
                    "src": "1208:7:12"
                  },
                  "id": 988,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1208:7:12"
                },
                {
                  "baseName": {
                    "id": 989,
                    "name": "Ownable",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 104,
                    "src": "1217:7:12"
                  },
                  "id": 990,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1217:7:12"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": false,
              "id": 1146,
              "linearizedBaseContracts": [
                1146,
                104,
                2461,
                296,
                220,
                840,
                852,
                613
              ],
              "name": "OneOfOnes",
              "nameLocation": "1195:9:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "054f7d9c",
                  "id": 993,
                  "mutability": "mutable",
                  "name": "frozen",
                  "nameLocation": "1242:6:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 1146,
                  "src": "1230:26:12",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1230:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": {
                    "hexValue": "66616c7365",
                    "id": 992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1251:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 998,
                  "mutability": "mutable",
                  "name": "_metadata",
                  "nameLocation": "1300:9:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 1146,
                  "src": "1263:46:12",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Metadata_$1005_storage_$",
                    "typeString": "mapping(uint256 => struct OneOfOnes.Metadata)"
                  },
                  "typeName": {
                    "id": 997,
                    "keyType": {
                      "id": 994,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1271:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1263:28:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Metadata_$1005_storage_$",
                      "typeString": "mapping(uint256 => struct OneOfOnes.Metadata)"
                    },
                    "valueType": {
                      "id": 996,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 995,
                        "name": "Metadata",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1005,
                        "src": "1282:8:12"
                      },
                      "referencedDeclaration": 1005,
                      "src": "1282:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Metadata_$1005_storage_ptr",
                        "typeString": "struct OneOfOnes.Metadata"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "canonicalName": "OneOfOnes.Metadata",
                  "id": 1005,
                  "members": [
                    {
                      "constant": false,
                      "id": 1000,
                      "mutability": "mutable",
                      "name": "name",
                      "nameLocation": "1346:4:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 1005,
                      "src": "1339:11:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 999,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1339:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1002,
                      "mutability": "mutable",
                      "name": "description",
                      "nameLocation": "1364:11:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 1005,
                      "src": "1357:18:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1001,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1357:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1004,
                      "mutability": "mutable",
                      "name": "image",
                      "nameLocation": "1389:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 1005,
                      "src": "1382:12:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1003,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1382:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Metadata",
                  "nameLocation": "1323:8:12",
                  "nodeType": "StructDefinition",
                  "scope": 1146,
                  "src": "1316:84:12",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1017,
                    "nodeType": "Block",
                    "src": "1444:97:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 1011,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1007,
                                  "src": "1467:7:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1010,
                                "name": "_exists",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1850,
                                "src": "1459:7:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 1012,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1459:16:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                              "id": 1013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1477:49:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                                "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                              },
                              "value": "ERC721Metadata: URI query for nonexistent token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                                "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                              }
                            ],
                            "id": 1009,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1451:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1451:76:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1015,
                        "nodeType": "ExpressionStatement",
                        "src": "1451:76:12"
                      },
                      {
                        "id": 1016,
                        "nodeType": "PlaceholderStatement",
                        "src": "1534:1:12"
                      }
                    ]
                  },
                  "id": 1018,
                  "name": "tokenExists",
                  "nameLocation": "1415:11:12",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 1008,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1007,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1435:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1018,
                        "src": "1427:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1006,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1427:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1426:17:12"
                  },
                  "src": "1406:135:12",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1281
                  ],
                  "body": {
                    "id": 1026,
                    "nodeType": "Block",
                    "src": "1621:21:12",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "31",
                          "id": 1024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1635:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "functionReturnParameters": 1023,
                        "id": 1025,
                        "nodeType": "Return",
                        "src": "1628:8:12"
                      }
                    ]
                  },
                  "id": 1027,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_startTokenId",
                  "nameLocation": "1556:13:12",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1020,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1594:8:12"
                  },
                  "parameters": {
                    "id": 1019,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1569:2:12"
                  },
                  "returnParameters": {
                    "id": 1023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1022,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1027,
                        "src": "1612:7:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1021,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1612:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1611:9:12"
                  },
                  "scope": 1146,
                  "src": "1547:95:12",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1055,
                    "nodeType": "Block",
                    "src": "1768:104:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 1048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1040,
                              "name": "_metadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 998,
                              "src": "1775:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Metadata_$1005_storage_$",
                                "typeString": "mapping(uint256 => struct OneOfOnes.Metadata storage ref)"
                              }
                            },
                            "id": 1042,
                            "indexExpression": {
                              "id": 1041,
                              "name": "_currentIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1225,
                              "src": "1785:13:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "1775:24:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Metadata_$1005_storage",
                              "typeString": "struct OneOfOnes.Metadata storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1044,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1029,
                                "src": "1811:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "id": 1045,
                                "name": "description",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1031,
                                "src": "1817:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "id": 1046,
                                "name": "image",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1033,
                                "src": "1830:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 1043,
                              "name": "Metadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1005,
                              "src": "1802:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Metadata_$1005_storage_ptr_$",
                                "typeString": "type(struct OneOfOnes.Metadata storage pointer)"
                              }
                            },
                            "id": 1047,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1802:34:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                              "typeString": "struct OneOfOnes.Metadata memory"
                            }
                          },
                          "src": "1775:61:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Metadata_$1005_storage",
                            "typeString": "struct OneOfOnes.Metadata storage ref"
                          }
                        },
                        "id": 1049,
                        "nodeType": "ExpressionStatement",
                        "src": "1775:61:12"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1051,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1035,
                              "src": "1853:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 1052,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1864:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 1050,
                            "name": "_safeMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1864,
                              1882
                            ],
                            "referencedDeclaration": 1864,
                            "src": "1843:9:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1843:23:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1054,
                        "nodeType": "ExpressionStatement",
                        "src": "1843:23:12"
                      }
                    ]
                  },
                  "functionSelector": "2aedc3f9",
                  "id": 1056,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1038,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1037,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 46,
                        "src": "1758:9:12"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1758:9:12"
                    }
                  ],
                  "name": "mint",
                  "nameLocation": "1657:4:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1036,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1029,
                        "mutability": "mutable",
                        "name": "name",
                        "nameLocation": "1676:4:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1056,
                        "src": "1662:18:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1028,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1662:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1031,
                        "mutability": "mutable",
                        "name": "description",
                        "nameLocation": "1696:11:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1056,
                        "src": "1682:25:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1030,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1682:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1033,
                        "mutability": "mutable",
                        "name": "image",
                        "nameLocation": "1723:5:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1056,
                        "src": "1709:19:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1032,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1709:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1035,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1738:9:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1056,
                        "src": "1730:17:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1730:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1661:87:12"
                  },
                  "returnParameters": {
                    "id": 1039,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1768:0:12"
                  },
                  "scope": 1146,
                  "src": "1648:224:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1624
                  ],
                  "body": {
                    "id": 1101,
                    "nodeType": "Block",
                    "src": "1987:375:12",
                    "statements": [
                      {
                        "assignments": [
                          1069
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1069,
                            "mutability": "mutable",
                            "name": "metadata",
                            "nameLocation": "2010:8:12",
                            "nodeType": "VariableDeclaration",
                            "scope": 1101,
                            "src": "1994:24:12",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                              "typeString": "struct OneOfOnes.Metadata"
                            },
                            "typeName": {
                              "id": 1068,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1067,
                                "name": "Metadata",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1005,
                                "src": "1994:8:12"
                              },
                              "referencedDeclaration": 1005,
                              "src": "1994:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Metadata_$1005_storage_ptr",
                                "typeString": "struct OneOfOnes.Metadata"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1073,
                        "initialValue": {
                          "baseExpression": {
                            "id": 1070,
                            "name": "_metadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 998,
                            "src": "2021:9:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Metadata_$1005_storage_$",
                              "typeString": "mapping(uint256 => struct OneOfOnes.Metadata storage ref)"
                            }
                          },
                          "id": 1072,
                          "indexExpression": {
                            "id": 1071,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1058,
                            "src": "2031:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2021:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Metadata_$1005_storage",
                            "typeString": "struct OneOfOnes.Metadata storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1994:45:12"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c",
                                  "id": 1078,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2101:31:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  "value": "data:application/json;base64,"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "hexValue": "7b226e616d65223a22",
                                              "id": 1085,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2206:11:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_14271abadab347880c45d45d3abf3dce36bb4aa23c658e4207d08ac9b3f38832",
                                                "typeString": "literal_string \"{\"name\":\"\""
                                              },
                                              "value": "{\"name\":\""
                                            },
                                            {
                                              "expression": {
                                                "id": 1086,
                                                "name": "metadata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1069,
                                                "src": "2219:8:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                                                  "typeString": "struct OneOfOnes.Metadata memory"
                                                }
                                              },
                                              "id": 1087,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "name",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 1000,
                                              "src": "2219:13:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "222c20226465736372697074696f6e223a22",
                                              "id": 1088,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2234:20:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_9780691b4087a1893a28b24020f5f6d0c7583060bd6cfeb54b8284a5bf55f11f",
                                                "typeString": "literal_string \"\", \"description\":\"\""
                                              },
                                              "value": "\", \"description\":\""
                                            },
                                            {
                                              "expression": {
                                                "id": 1089,
                                                "name": "metadata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1069,
                                                "src": "2256:8:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                                                  "typeString": "struct OneOfOnes.Metadata memory"
                                                }
                                              },
                                              "id": 1090,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "description",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 1002,
                                              "src": "2256:20:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "222c2022696d616765223a2022",
                                              "id": 1091,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2278:15:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_8d0de490dde571af103e878aa265925a94dd83b4f74e62b617db5ad43a4f76af",
                                                "typeString": "literal_string \"\", \"image\": \"\""
                                              },
                                              "value": "\", \"image\": \""
                                            },
                                            {
                                              "expression": {
                                                "id": 1092,
                                                "name": "metadata",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1069,
                                                "src": "2295:8:12",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                                                  "typeString": "struct OneOfOnes.Metadata memory"
                                                }
                                              },
                                              "id": 1093,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "image",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 1004,
                                              "src": "2295:14:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              }
                                            },
                                            {
                                              "hexValue": "227d",
                                              "id": 1094,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "2311:4:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_835b459273672627bbafc3a2eded65187a632f4128bdc79e126c7ef579a27475",
                                                "typeString": "literal_string \"\"}\""
                                              },
                                              "value": "\"}"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_stringliteral_14271abadab347880c45d45d3abf3dce36bb4aa23c658e4207d08ac9b3f38832",
                                                "typeString": "literal_string \"{\"name\":\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_9780691b4087a1893a28b24020f5f6d0c7583060bd6cfeb54b8284a5bf55f11f",
                                                "typeString": "literal_string \"\", \"description\":\"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_8d0de490dde571af103e878aa265925a94dd83b4f74e62b617db5ad43a4f76af",
                                                "typeString": "literal_string \"\", \"image\": \"\""
                                              },
                                              {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                              },
                                              {
                                                "typeIdentifier": "t_stringliteral_835b459273672627bbafc3a2eded65187a632f4128bdc79e126c7ef579a27475",
                                                "typeString": "literal_string \"\"}\""
                                              }
                                            ],
                                            "expression": {
                                              "id": 1083,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "2189:3:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 1084,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "encodePacked",
                                            "nodeType": "MemberAccess",
                                            "src": "2189:16:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                              "typeString": "function () pure returns (bytes memory)"
                                            }
                                          },
                                          "id": 1095,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2189:127:12",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "id": 1082,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2169:5:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 1081,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2169:5:12",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 1096,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2169:160:12",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "id": 1079,
                                      "name": "Base64",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 967,
                                      "src": "2143:6:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Base64_$967_$",
                                        "typeString": "type(library Base64)"
                                      }
                                    },
                                    "id": 1080,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 905,
                                    "src": "2143:13:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_string_memory_ptr_$",
                                      "typeString": "function (bytes memory) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1097,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2143:197:12",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_bccab2d885f86fda81bfd84dd4248d31f8073b473d187111d36536db073076fa",
                                    "typeString": "literal_string \"data:application/json;base64,\""
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 1076,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "2074:3:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 1077,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "2074:16:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 1098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2074:275:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1075,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2059:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1074,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "2059:6:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2059:297:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1066,
                        "id": 1100,
                        "nodeType": "Return",
                        "src": "2052:304:12"
                      }
                    ]
                  },
                  "functionSelector": "c87b56dd",
                  "id": 1102,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1062,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1058,
                          "src": "1954:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1063,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1061,
                        "name": "tokenExists",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1018,
                        "src": "1942:11:12"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1942:20:12"
                    }
                  ],
                  "name": "tokenURI",
                  "nameLocation": "1887:8:12",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1060,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "1933:8:12"
                  },
                  "parameters": {
                    "id": 1059,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1058,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "1904:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1102,
                        "src": "1896:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1057,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1896:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1895:17:12"
                  },
                  "returnParameters": {
                    "id": 1066,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1065,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1102,
                        "src": "1972:13:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1064,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1972:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1971:15:12"
                  },
                  "scope": 1146,
                  "src": "1878:484:12",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1111,
                    "nodeType": "Block",
                    "src": "2405:26:12",
                    "statements": [
                      {
                        "expression": {
                          "id": 1109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1107,
                            "name": "frozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 993,
                            "src": "2412:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 1108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2421:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2412:13:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1110,
                        "nodeType": "ExpressionStatement",
                        "src": "2412:13:12"
                      }
                    ]
                  },
                  "functionSelector": "62a5af3b",
                  "id": 1112,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1105,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1104,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 46,
                        "src": "2395:9:12"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2395:9:12"
                    }
                  ],
                  "name": "freeze",
                  "nameLocation": "2377:6:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1103,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2383:2:12"
                  },
                  "returnParameters": {
                    "id": 1106,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2405:0:12"
                  },
                  "scope": 1146,
                  "src": "2368:63:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 1144,
                    "nodeType": "Block",
                    "src": "2584:130:12",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "2600:7:12",
                              "subExpression": {
                                "id": 1129,
                                "name": "frozen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 993,
                                "src": "2601:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433732314d657461646174613a206d657461646174612069732066726f7a656e",
                              "id": 1131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2609:36:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2c716192779ab80316194a665e9324a61481b2c5b5229768f1862bcf387fc540",
                                "typeString": "literal_string \"ERC721Metadata: metadata is frozen\""
                              },
                              "value": "ERC721Metadata: metadata is frozen"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2c716192779ab80316194a665e9324a61481b2c5b5229768f1862bcf387fc540",
                                "typeString": "literal_string \"ERC721Metadata: metadata is frozen\""
                              }
                            ],
                            "id": 1128,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2591:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2591:55:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1133,
                        "nodeType": "ExpressionStatement",
                        "src": "2591:55:12"
                      },
                      {
                        "expression": {
                          "id": 1142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 1134,
                              "name": "_metadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 998,
                              "src": "2653:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Metadata_$1005_storage_$",
                                "typeString": "mapping(uint256 => struct OneOfOnes.Metadata storage ref)"
                              }
                            },
                            "id": 1136,
                            "indexExpression": {
                              "id": 1135,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1114,
                              "src": "2663:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2653:18:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Metadata_$1005_storage",
                              "typeString": "struct OneOfOnes.Metadata storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 1138,
                                "name": "name",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1116,
                                "src": "2683:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "id": 1139,
                                "name": "description",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1118,
                                "src": "2689:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "id": 1140,
                                "name": "image",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1120,
                                "src": "2702:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 1137,
                              "name": "Metadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1005,
                              "src": "2674:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Metadata_$1005_storage_ptr_$",
                                "typeString": "type(struct OneOfOnes.Metadata storage pointer)"
                              }
                            },
                            "id": 1141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2674:34:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Metadata_$1005_memory_ptr",
                              "typeString": "struct OneOfOnes.Metadata memory"
                            }
                          },
                          "src": "2653:55:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Metadata_$1005_storage",
                            "typeString": "struct OneOfOnes.Metadata storage ref"
                          }
                        },
                        "id": 1143,
                        "nodeType": "ExpressionStatement",
                        "src": "2653:55:12"
                      }
                    ]
                  },
                  "functionSelector": "c401aa99",
                  "id": 1145,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "id": 1123,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1114,
                          "src": "2565:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1124,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1122,
                        "name": "tokenExists",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1018,
                        "src": "2553:11:12"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2553:20:12"
                    },
                    {
                      "id": 1126,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1125,
                        "name": "onlyOwner",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 46,
                        "src": "2574:9:12"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2574:9:12"
                    }
                  ],
                  "name": "updateMetadata",
                  "nameLocation": "2446:14:12",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1114,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2469:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1145,
                        "src": "2461:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2461:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1116,
                        "mutability": "mutable",
                        "name": "name",
                        "nameLocation": "2492:4:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1145,
                        "src": "2478:18:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1115,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2478:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1118,
                        "mutability": "mutable",
                        "name": "description",
                        "nameLocation": "2512:11:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1145,
                        "src": "2498:25:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1117,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2498:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1120,
                        "mutability": "mutable",
                        "name": "image",
                        "nameLocation": "2539:5:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 1145,
                        "src": "2525:19:12",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1119,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2525:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2460:85:12"
                  },
                  "returnParameters": {
                    "id": 1127,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2584:0:12"
                  },
                  "scope": 1146,
                  "src": "2437:277:12",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 1147,
              "src": "1177:1540:12",
              "usedErrors": [
                1158,
                1160,
                1162,
                1164,
                1166,
                1174,
                1176,
                1180,
                1184,
                1186,
                1188,
                1190
              ]
            }
          ],
          "src": "35:2682:12"
        },
        "id": 12
      },
      "erc721a/contracts/ERC721A.sol": {
        "ast": {
          "absolutePath": "erc721a/contracts/ERC721A.sol",
          "exportedSymbols": {
            "Address": [
              591
            ],
            "ApprovalCallerNotOwnerNorApproved": [
              1158
            ],
            "ApprovalQueryForNonexistentToken": [
              1160
            ],
            "ApprovalToCurrentOwner": [
              1164
            ],
            "ApproveToCaller": [
              1162
            ],
            "AuxQueryForZeroAddress": [
              1172
            ],
            "BalanceQueryForZeroAddress": [
              1166
            ],
            "BurnedQueryForZeroAddress": [
              1170
            ],
            "Context": [
              613
            ],
            "ERC165": [
              840
            ],
            "ERC721A": [
              2461
            ],
            "IERC165": [
              852
            ],
            "IERC721": [
              220
            ],
            "IERC721Enumerable": [
              269
            ],
            "IERC721Metadata": [
              296
            ],
            "IERC721Receiver": [
              238
            ],
            "MintToZeroAddress": [
              1174
            ],
            "MintZeroQuantity": [
              1176
            ],
            "MintedQueryForZeroAddress": [
              1168
            ],
            "OwnerIndexOutOfBounds": [
              1178
            ],
            "OwnerQueryForNonexistentToken": [
              1180
            ],
            "Strings": [
              816
            ],
            "TokenIndexOutOfBounds": [
              1182
            ],
            "TransferCallerNotOwnerNorApproved": [
              1184
            ],
            "TransferFromIncorrectOwner": [
              1186
            ],
            "TransferToNonERC721ReceiverImplementer": [
              1188
            ],
            "TransferToZeroAddress": [
              1190
            ],
            "URIQueryForNonexistentToken": [
              1192
            ]
          },
          "id": 2462,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1148,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "56:23:13"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
              "id": 1149,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 221,
              "src": "81:58:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
              "file": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
              "id": 1150,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 239,
              "src": "140:66:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
              "id": 1151,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 297,
              "src": "207:77:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
              "file": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol",
              "id": 1152,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 270,
              "src": "285:79:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "@openzeppelin/contracts/utils/Address.sol",
              "id": 1153,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 592,
              "src": "365:51:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Context.sol",
              "file": "@openzeppelin/contracts/utils/Context.sol",
              "id": 1154,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 614,
              "src": "417:51:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "@openzeppelin/contracts/utils/Strings.sol",
              "id": 1155,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 817,
              "src": "469:51:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
              "id": 1156,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2462,
              "sourceUnit": 841,
              "src": "521:64:13",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "id": 1158,
              "name": "ApprovalCallerNotOwnerNorApproved",
              "nameLocation": "593:33:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1157,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "626:2:13"
              },
              "src": "587:42:13"
            },
            {
              "id": 1160,
              "name": "ApprovalQueryForNonexistentToken",
              "nameLocation": "636:32:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1159,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "668:2:13"
              },
              "src": "630:41:13"
            },
            {
              "id": 1162,
              "name": "ApproveToCaller",
              "nameLocation": "678:15:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1161,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "693:2:13"
              },
              "src": "672:24:13"
            },
            {
              "id": 1164,
              "name": "ApprovalToCurrentOwner",
              "nameLocation": "703:22:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1163,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "725:2:13"
              },
              "src": "697:31:13"
            },
            {
              "id": 1166,
              "name": "BalanceQueryForZeroAddress",
              "nameLocation": "735:26:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1165,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "761:2:13"
              },
              "src": "729:35:13"
            },
            {
              "id": 1168,
              "name": "MintedQueryForZeroAddress",
              "nameLocation": "771:25:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1167,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "796:2:13"
              },
              "src": "765:34:13"
            },
            {
              "id": 1170,
              "name": "BurnedQueryForZeroAddress",
              "nameLocation": "806:25:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1169,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "831:2:13"
              },
              "src": "800:34:13"
            },
            {
              "id": 1172,
              "name": "AuxQueryForZeroAddress",
              "nameLocation": "841:22:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1171,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "863:2:13"
              },
              "src": "835:31:13"
            },
            {
              "id": 1174,
              "name": "MintToZeroAddress",
              "nameLocation": "873:17:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1173,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "890:2:13"
              },
              "src": "867:26:13"
            },
            {
              "id": 1176,
              "name": "MintZeroQuantity",
              "nameLocation": "900:16:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1175,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "916:2:13"
              },
              "src": "894:25:13"
            },
            {
              "id": 1178,
              "name": "OwnerIndexOutOfBounds",
              "nameLocation": "926:21:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1177,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "947:2:13"
              },
              "src": "920:30:13"
            },
            {
              "id": 1180,
              "name": "OwnerQueryForNonexistentToken",
              "nameLocation": "957:29:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1179,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "986:2:13"
              },
              "src": "951:38:13"
            },
            {
              "id": 1182,
              "name": "TokenIndexOutOfBounds",
              "nameLocation": "996:21:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1181,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1017:2:13"
              },
              "src": "990:30:13"
            },
            {
              "id": 1184,
              "name": "TransferCallerNotOwnerNorApproved",
              "nameLocation": "1027:33:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1183,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1060:2:13"
              },
              "src": "1021:42:13"
            },
            {
              "id": 1186,
              "name": "TransferFromIncorrectOwner",
              "nameLocation": "1070:26:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1185,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1096:2:13"
              },
              "src": "1064:35:13"
            },
            {
              "id": 1188,
              "name": "TransferToNonERC721ReceiverImplementer",
              "nameLocation": "1106:38:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1187,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1144:2:13"
              },
              "src": "1100:47:13"
            },
            {
              "id": 1190,
              "name": "TransferToZeroAddress",
              "nameLocation": "1154:21:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1189,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1175:2:13"
              },
              "src": "1148:30:13"
            },
            {
              "id": 1192,
              "name": "URIQueryForNonexistentToken",
              "nameLocation": "1185:27:13",
              "nodeType": "ErrorDefinition",
              "parameters": {
                "id": 1191,
                "nodeType": "ParameterList",
                "parameters": [],
                "src": "1212:2:13"
              },
              "src": "1179:36:13"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1194,
                    "name": "Context",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 613,
                    "src": "1728:7:13"
                  },
                  "id": 1195,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1728:7:13"
                },
                {
                  "baseName": {
                    "id": 1196,
                    "name": "ERC165",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 840,
                    "src": "1737:6:13"
                  },
                  "id": 1197,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1737:6:13"
                },
                {
                  "baseName": {
                    "id": 1198,
                    "name": "IERC721",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 220,
                    "src": "1745:7:13"
                  },
                  "id": 1199,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1745:7:13"
                },
                {
                  "baseName": {
                    "id": 1200,
                    "name": "IERC721Metadata",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 296,
                    "src": "1754:15:13"
                  },
                  "id": 1201,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1754:15:13"
                }
              ],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1193,
                "nodeType": "StructuredDocumentation",
                "src": "1217:490:13",
                "text": " @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n the Metadata extension. Built to optimize for lower gas during batch mints.\n Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).\n Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.\n Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256)."
              },
              "fullyImplemented": true,
              "id": 2461,
              "linearizedBaseContracts": [
                2461,
                296,
                220,
                840,
                852,
                613
              ],
              "name": "ERC721A",
              "nameLocation": "1717:7:13",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1204,
                  "libraryName": {
                    "id": 1202,
                    "name": "Address",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 591,
                    "src": "1782:7:13"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1776:26:13",
                  "typeName": {
                    "id": 1203,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1794:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "id": 1207,
                  "libraryName": {
                    "id": 1205,
                    "name": "Strings",
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 816,
                    "src": "1813:7:13"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1807:26:13",
                  "typeName": {
                    "id": 1206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1825:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "canonicalName": "ERC721A.TokenOwnership",
                  "id": 1214,
                  "members": [
                    {
                      "constant": false,
                      "id": 1209,
                      "mutability": "mutable",
                      "name": "addr",
                      "nameLocation": "1974:4:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1214,
                      "src": "1966:12:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1208,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1966:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1211,
                      "mutability": "mutable",
                      "name": "startTimestamp",
                      "nameLocation": "2087:14:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1214,
                      "src": "2080:21:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1210,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2080:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1213,
                      "mutability": "mutable",
                      "name": "burned",
                      "nameLocation": "2162:6:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1214,
                      "src": "2157:11:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1212,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2157:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "TokenOwnership",
                  "nameLocation": "1904:14:13",
                  "nodeType": "StructDefinition",
                  "scope": 2461,
                  "src": "1897:278:13",
                  "visibility": "public"
                },
                {
                  "canonicalName": "ERC721A.AddressData",
                  "id": 1223,
                  "members": [
                    {
                      "constant": false,
                      "id": 1216,
                      "mutability": "mutable",
                      "name": "balance",
                      "nameLocation": "2330:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1223,
                      "src": "2323:14:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1215,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2323:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1218,
                      "mutability": "mutable",
                      "name": "numberMinted",
                      "nameLocation": "2429:12:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1223,
                      "src": "2422:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1217,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2422:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1220,
                      "mutability": "mutable",
                      "name": "numberBurned",
                      "nameLocation": "2533:12:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1223,
                      "src": "2526:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1219,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2526:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1222,
                      "mutability": "mutable",
                      "name": "aux",
                      "nameLocation": "2760:3:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 1223,
                      "src": "2753:10:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 1221,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2753:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "AddressData",
                  "nameLocation": "2246:11:13",
                  "nodeType": "StructDefinition",
                  "scope": 2461,
                  "src": "2239:531:13",
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 1225,
                  "mutability": "mutable",
                  "name": "_currentIndex",
                  "nameLocation": "2844:13:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "2827:30:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1224,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2827:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1227,
                  "mutability": "mutable",
                  "name": "_burnCounter",
                  "nameLocation": "2917:12:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "2900:29:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1226,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2900:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1229,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "2969:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "2954:20:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1228,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2954:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1231,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "3016:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "3001:22:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1230,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3001:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1236,
                  "mutability": "mutable",
                  "name": "_ownerships",
                  "nameLocation": "3245:11:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "3201:55:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                    "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership)"
                  },
                  "typeName": {
                    "id": 1235,
                    "keyType": {
                      "id": 1232,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3209:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "3201:34:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership)"
                    },
                    "valueType": {
                      "id": 1234,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 1233,
                        "name": "TokenOwnership",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1214,
                        "src": "3220:14:13"
                      },
                      "referencedDeclaration": 1214,
                      "src": "3220:14:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage_ptr",
                        "typeString": "struct ERC721A.TokenOwnership"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1241,
                  "mutability": "mutable",
                  "name": "_addressData",
                  "nameLocation": "3348:12:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "3308:52:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                    "typeString": "mapping(address => struct ERC721A.AddressData)"
                  },
                  "typeName": {
                    "id": 1240,
                    "keyType": {
                      "id": 1237,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3316:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "3308:31:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                      "typeString": "mapping(address => struct ERC721A.AddressData)"
                    },
                    "valueType": {
                      "id": 1239,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 1238,
                        "name": "AddressData",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 1223,
                        "src": "3327:11:13"
                      },
                      "referencedDeclaration": 1223,
                      "src": "3327:11:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressData_$1223_storage_ptr",
                        "typeString": "struct ERC721A.AddressData"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1245,
                  "mutability": "mutable",
                  "name": "_tokenApprovals",
                  "nameLocation": "3452:15:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "3416:51:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 1244,
                    "keyType": {
                      "id": 1242,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3424:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "3416:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 1243,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3435:7:13",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1251,
                  "mutability": "mutable",
                  "name": "_operatorApprovals",
                  "nameLocation": "3575:18:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 2461,
                  "src": "3522:71:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                    "typeString": "mapping(address => mapping(address => bool))"
                  },
                  "typeName": {
                    "id": 1250,
                    "keyType": {
                      "id": 1246,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3530:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "3522:44:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                      "typeString": "mapping(address => mapping(address => bool))"
                    },
                    "valueType": {
                      "id": 1249,
                      "keyType": {
                        "id": 1247,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3549:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "3541:24:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      },
                      "valueType": {
                        "id": 1248,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3560:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1271,
                    "nodeType": "Block",
                    "src": "3656:98:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 1260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1258,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1229,
                            "src": "3666:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1259,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1253,
                            "src": "3674:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3666:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1261,
                        "nodeType": "ExpressionStatement",
                        "src": "3666:13:13"
                      },
                      {
                        "expression": {
                          "id": 1264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1262,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1231,
                            "src": "3689:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1263,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1255,
                            "src": "3699:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "3689:17:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1265,
                        "nodeType": "ExpressionStatement",
                        "src": "3689:17:13"
                      },
                      {
                        "expression": {
                          "id": 1269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1266,
                            "name": "_currentIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1225,
                            "src": "3716:13:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1267,
                              "name": "_startTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1281,
                              "src": "3732:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 1268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3732:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3716:31:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1270,
                        "nodeType": "ExpressionStatement",
                        "src": "3716:31:13"
                      }
                    ]
                  },
                  "id": 1272,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1256,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1253,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "3626:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1272,
                        "src": "3612:19:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1252,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3612:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1255,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "3647:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1272,
                        "src": "3633:21:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1254,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3633:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3611:44:13"
                  },
                  "returnParameters": {
                    "id": 1257,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3656:0:13"
                  },
                  "scope": 2461,
                  "src": "3600:154:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1280,
                    "nodeType": "Block",
                    "src": "3911:25:13",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 1278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3928:1:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1277,
                        "id": 1279,
                        "nodeType": "Return",
                        "src": "3921:8:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1273,
                    "nodeType": "StructuredDocumentation",
                    "src": "3760:81:13",
                    "text": " To change the starting tokenId, please override this function."
                  },
                  "id": 1281,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_startTokenId",
                  "nameLocation": "3855:13:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3868:2:13"
                  },
                  "returnParameters": {
                    "id": 1277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1276,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1281,
                        "src": "3902:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3902:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3901:9:13"
                  },
                  "scope": 2461,
                  "src": "3846:90:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1295,
                    "nodeType": "Block",
                    "src": "4167:244:13",
                    "statements": [
                      {
                        "id": 1294,
                        "nodeType": "UncheckedBlock",
                        "src": "4317:88:13",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1287,
                                  "name": "_currentIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1225,
                                  "src": "4348:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 1288,
                                  "name": "_burnCounter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1227,
                                  "src": "4364:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4348:28:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1290,
                                  "name": "_startTokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1281,
                                  "src": "4379:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4379:15:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4348:46:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 1286,
                            "id": 1293,
                            "nodeType": "Return",
                            "src": "4341:53:13"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1282,
                    "nodeType": "StructuredDocumentation",
                    "src": "3942:167:13",
                    "text": " @dev See {IERC721Enumerable-totalSupply}.\n @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1296,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "4123:11:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4134:2:13"
                  },
                  "returnParameters": {
                    "id": 1286,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1285,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1296,
                        "src": "4158:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1284,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4158:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4157:9:13"
                  },
                  "scope": 2461,
                  "src": "4114:297:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1308,
                    "nodeType": "Block",
                    "src": "4555:221:13",
                    "statements": [
                      {
                        "id": 1307,
                        "nodeType": "UncheckedBlock",
                        "src": "4697:73:13",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1302,
                                "name": "_currentIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1225,
                                "src": "4728:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1303,
                                  "name": "_startTokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1281,
                                  "src": "4744:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4744:15:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4728:31:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 1301,
                            "id": 1306,
                            "nodeType": "Return",
                            "src": "4721:38:13"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1297,
                    "nodeType": "StructuredDocumentation",
                    "src": "4417:77:13",
                    "text": " Returns the total amount of tokens minted in the contract."
                  },
                  "id": 1309,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_totalMinted",
                  "nameLocation": "4508:12:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4520:2:13"
                  },
                  "returnParameters": {
                    "id": 1301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1300,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1309,
                        "src": "4546:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1299,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4546:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4545:9:13"
                  },
                  "scope": 2461,
                  "src": "4499:277:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    839,
                    851
                  ],
                  "body": {
                    "id": 1339,
                    "nodeType": "Block",
                    "src": "4951:192:13",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 1325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1320,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1312,
                                "src": "4980:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1322,
                                      "name": "IERC721",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 220,
                                      "src": "5000:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$220_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721_$220_$",
                                        "typeString": "type(contract IERC721)"
                                      }
                                    ],
                                    "id": 1321,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "4995:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 1323,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4995:13:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721_$220",
                                    "typeString": "type(contract IERC721)"
                                  }
                                },
                                "id": 1324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "4995:25:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "4980:40:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 1331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1326,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1312,
                                "src": "5036:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1328,
                                      "name": "IERC721Metadata",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 296,
                                      "src": "5056:15:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$296_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$296_$",
                                        "typeString": "type(contract IERC721Metadata)"
                                      }
                                    ],
                                    "id": 1327,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "5051:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 1329,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5051:21:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721Metadata_$296",
                                    "typeString": "type(contract IERC721Metadata)"
                                  }
                                },
                                "id": 1330,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "5051:33:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "5036:48:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "4980:104:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1335,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1312,
                                "src": "5124:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 1333,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "5100:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC721A_$2461_$",
                                  "typeString": "type(contract super ERC721A)"
                                }
                              },
                              "id": 1334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 839,
                              "src": "5100:23:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 1336,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5100:36:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4980:156:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1319,
                        "id": 1338,
                        "nodeType": "Return",
                        "src": "4961:175:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1310,
                    "nodeType": "StructuredDocumentation",
                    "src": "4782:56:13",
                    "text": " @dev See {IERC165-supportsInterface}."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1340,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "4852:17:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1316,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 1314,
                        "name": "ERC165",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 840,
                        "src": "4919:6:13"
                      },
                      {
                        "id": 1315,
                        "name": "IERC165",
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 852,
                        "src": "4927:7:13"
                      }
                    ],
                    "src": "4910:25:13"
                  },
                  "parameters": {
                    "id": 1313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1312,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "4877:11:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1340,
                        "src": "4870:18:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1311,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "4870:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4869:20:13"
                  },
                  "returnParameters": {
                    "id": 1319,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1318,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1340,
                        "src": "4945:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1317,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4945:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4944:6:13"
                  },
                  "scope": 2461,
                  "src": "4843:300:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    145
                  ],
                  "body": {
                    "id": 1367,
                    "nodeType": "Block",
                    "src": "5275:130:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1349,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1343,
                            "src": "5289:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5306:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5298:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1350,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5298:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1353,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5298:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5289:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1358,
                        "nodeType": "IfStatement",
                        "src": "5285:60:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1355,
                              "name": "BalanceQueryForZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1166,
                              "src": "5317:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1356,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5317:28:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1357,
                          "nodeType": "RevertStatement",
                          "src": "5310:35:13"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 1361,
                                  "name": "_addressData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1241,
                                  "src": "5370:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                    "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                  }
                                },
                                "id": 1363,
                                "indexExpression": {
                                  "id": 1362,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1343,
                                  "src": "5383:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5370:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                  "typeString": "struct ERC721A.AddressData storage ref"
                                }
                              },
                              "id": 1364,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balance",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1216,
                              "src": "5370:27:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 1360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5362:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1359,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5362:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5362:36:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1348,
                        "id": 1366,
                        "nodeType": "Return",
                        "src": "5355:43:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1341,
                    "nodeType": "StructuredDocumentation",
                    "src": "5149:48:13",
                    "text": " @dev See {IERC721-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 1368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "5211:9:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1345,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "5248:8:13"
                  },
                  "parameters": {
                    "id": 1344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1343,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "5229:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "5221:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1342,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5221:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5220:15:13"
                  },
                  "returnParameters": {
                    "id": 1348,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1347,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1368,
                        "src": "5266:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1346,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5266:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5265:9:13"
                  },
                  "scope": 2461,
                  "src": "5202:203:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1394,
                    "nodeType": "Block",
                    "src": "5552:134:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1376,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1371,
                            "src": "5566:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5583:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5575:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1377,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5575:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5575:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5566:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1385,
                        "nodeType": "IfStatement",
                        "src": "5562:59:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1382,
                              "name": "MintedQueryForZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1168,
                              "src": "5594:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5594:27:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1384,
                          "nodeType": "RevertStatement",
                          "src": "5587:34:13"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 1388,
                                  "name": "_addressData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1241,
                                  "src": "5646:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                    "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                  }
                                },
                                "id": 1390,
                                "indexExpression": {
                                  "id": 1389,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1371,
                                  "src": "5659:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5646:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                  "typeString": "struct ERC721A.AddressData storage ref"
                                }
                              },
                              "id": 1391,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "numberMinted",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1218,
                              "src": "5646:32:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 1387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5638:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1386,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5638:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5638:41:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1375,
                        "id": 1393,
                        "nodeType": "Return",
                        "src": "5631:48:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1369,
                    "nodeType": "StructuredDocumentation",
                    "src": "5411:66:13",
                    "text": " Returns the number of tokens minted by `owner`."
                  },
                  "id": 1395,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_numberMinted",
                  "nameLocation": "5491:13:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1372,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1371,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "5513:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "5505:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1370,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5505:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5504:15:13"
                  },
                  "returnParameters": {
                    "id": 1375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1374,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1395,
                        "src": "5543:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5543:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5542:9:13"
                  },
                  "scope": 2461,
                  "src": "5482:204:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1421,
                    "nodeType": "Block",
                    "src": "5849:134:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1408,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1403,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1398,
                            "src": "5863:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1406,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5880:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1405,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5872:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1404,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5872:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1407,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5872:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5863:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1412,
                        "nodeType": "IfStatement",
                        "src": "5859:59:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1409,
                              "name": "BurnedQueryForZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1170,
                              "src": "5891:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5891:27:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1411,
                          "nodeType": "RevertStatement",
                          "src": "5884:34:13"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 1415,
                                  "name": "_addressData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1241,
                                  "src": "5943:12:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                    "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                  }
                                },
                                "id": 1417,
                                "indexExpression": {
                                  "id": 1416,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1398,
                                  "src": "5956:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5943:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                  "typeString": "struct ERC721A.AddressData storage ref"
                                }
                              },
                              "id": 1418,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "numberBurned",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1220,
                              "src": "5943:32:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 1414,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5935:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1413,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5935:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5935:41:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1402,
                        "id": 1420,
                        "nodeType": "Return",
                        "src": "5928:48:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1396,
                    "nodeType": "StructuredDocumentation",
                    "src": "5692:82:13",
                    "text": " Returns the number of tokens burned by or on behalf of `owner`."
                  },
                  "id": 1422,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_numberBurned",
                  "nameLocation": "5788:13:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1398,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "5810:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1422,
                        "src": "5802:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5802:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5801:15:13"
                  },
                  "returnParameters": {
                    "id": 1402,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1401,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1422,
                        "src": "5840:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1400,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5840:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5839:9:13"
                  },
                  "scope": 2461,
                  "src": "5779:204:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1445,
                    "nodeType": "Block",
                    "src": "6159:113:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1430,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1425,
                            "src": "6173:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6190:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1432,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6182:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1431,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6182:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6182:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6173:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1439,
                        "nodeType": "IfStatement",
                        "src": "6169:56:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1436,
                              "name": "AuxQueryForZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1172,
                              "src": "6201:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6201:24:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1438,
                          "nodeType": "RevertStatement",
                          "src": "6194:31:13"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "id": 1440,
                              "name": "_addressData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1241,
                              "src": "6242:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                              }
                            },
                            "id": 1442,
                            "indexExpression": {
                              "id": 1441,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1425,
                              "src": "6255:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6242:19:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                              "typeString": "struct ERC721A.AddressData storage ref"
                            }
                          },
                          "id": 1443,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "aux",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1222,
                          "src": "6242:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 1429,
                        "id": 1444,
                        "nodeType": "Return",
                        "src": "6235:30:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1423,
                    "nodeType": "StructuredDocumentation",
                    "src": "5989:102:13",
                    "text": " Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used)."
                  },
                  "id": 1446,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getAux",
                  "nameLocation": "6105:7:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1426,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1425,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "6121:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1446,
                        "src": "6113:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1424,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6113:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6112:15:13"
                  },
                  "returnParameters": {
                    "id": 1429,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1428,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1446,
                        "src": "6151:6:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 1427,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "6151:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6150:8:13"
                  },
                  "scope": 2461,
                  "src": "6096:176:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1471,
                    "nodeType": "Block",
                    "src": "6507:112:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1454,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1449,
                            "src": "6521:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1457,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6538:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1456,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6530:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1455,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6530:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1458,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6530:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6521:19:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1463,
                        "nodeType": "IfStatement",
                        "src": "6517:56:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1460,
                              "name": "AuxQueryForZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1172,
                              "src": "6549:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6549:24:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1462,
                          "nodeType": "RevertStatement",
                          "src": "6542:31:13"
                        }
                      },
                      {
                        "expression": {
                          "id": 1469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 1464,
                                "name": "_addressData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1241,
                                "src": "6583:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                  "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                }
                              },
                              "id": 1466,
                              "indexExpression": {
                                "id": 1465,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1449,
                                "src": "6596:5:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6583:19:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                "typeString": "struct ERC721A.AddressData storage ref"
                              }
                            },
                            "id": 1467,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "aux",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1222,
                            "src": "6583:23:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1468,
                            "name": "aux",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1451,
                            "src": "6609:3:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6583:29:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 1470,
                        "nodeType": "ExpressionStatement",
                        "src": "6583:29:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1447,
                    "nodeType": "StructuredDocumentation",
                    "src": "6278:171:13",
                    "text": " Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).\n If there are multiple variables, please pack them into a uint64."
                  },
                  "id": 1472,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setAux",
                  "nameLocation": "6463:7:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1452,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1449,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "6479:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1472,
                        "src": "6471:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1448,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6471:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1451,
                        "mutability": "mutable",
                        "name": "aux",
                        "nameLocation": "6493:3:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1472,
                        "src": "6486:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 1450,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "6486:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6470:27:13"
                  },
                  "returnParameters": {
                    "id": 1453,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6507:0:13"
                  },
                  "scope": 2461,
                  "src": "6454:165:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1545,
                    "nodeType": "Block",
                    "src": "6899:999:13",
                    "statements": [
                      {
                        "assignments": [
                          1482
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1482,
                            "mutability": "mutable",
                            "name": "curr",
                            "nameLocation": "6917:4:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 1545,
                            "src": "6909:12:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1481,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6909:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1484,
                        "initialValue": {
                          "id": 1483,
                          "name": "tokenId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1475,
                          "src": "6924:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6909:22:13"
                      },
                      {
                        "id": 1541,
                        "nodeType": "UncheckedBlock",
                        "src": "6942:902:13",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1492,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1488,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 1485,
                                    "name": "_startTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1281,
                                    "src": "6970:13:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 1486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6970:15:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 1487,
                                  "name": "curr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1482,
                                  "src": "6989:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6970:23:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1489,
                                  "name": "curr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1482,
                                  "src": "6997:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 1490,
                                  "name": "_currentIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1225,
                                  "src": "7004:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6997:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "6970:47:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 1540,
                            "nodeType": "IfStatement",
                            "src": "6966:868:13",
                            "trueBody": {
                              "id": 1539,
                              "nodeType": "Block",
                              "src": "7019:815:13",
                              "statements": [
                                {
                                  "assignments": [
                                    1495
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 1495,
                                      "mutability": "mutable",
                                      "name": "ownership",
                                      "nameLocation": "7059:9:13",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 1539,
                                      "src": "7037:31:13",
                                      "stateVariable": false,
                                      "storageLocation": "memory",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                        "typeString": "struct ERC721A.TokenOwnership"
                                      },
                                      "typeName": {
                                        "id": 1494,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                          "id": 1493,
                                          "name": "TokenOwnership",
                                          "nodeType": "IdentifierPath",
                                          "referencedDeclaration": 1214,
                                          "src": "7037:14:13"
                                        },
                                        "referencedDeclaration": 1214,
                                        "src": "7037:14:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage_ptr",
                                          "typeString": "struct ERC721A.TokenOwnership"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 1499,
                                  "initialValue": {
                                    "baseExpression": {
                                      "id": 1496,
                                      "name": "_ownerships",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1236,
                                      "src": "7071:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                        "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                      }
                                    },
                                    "id": 1498,
                                    "indexExpression": {
                                      "id": 1497,
                                      "name": "curr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1482,
                                      "src": "7083:4:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7071:17:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                      "typeString": "struct ERC721A.TokenOwnership storage ref"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "7037:51:13"
                                },
                                {
                                  "condition": {
                                    "id": 1502,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "!",
                                    "prefix": true,
                                    "src": "7110:17:13",
                                    "subExpression": {
                                      "expression": {
                                        "id": 1500,
                                        "name": "ownership",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1495,
                                        "src": "7111:9:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                          "typeString": "struct ERC721A.TokenOwnership memory"
                                        }
                                      },
                                      "id": 1501,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "burned",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1213,
                                      "src": "7111:16:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 1538,
                                  "nodeType": "IfStatement",
                                  "src": "7106:714:13",
                                  "trueBody": {
                                    "id": 1537,
                                    "nodeType": "Block",
                                    "src": "7129:691:13",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          "id": 1509,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 1503,
                                              "name": "ownership",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1495,
                                              "src": "7155:9:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                "typeString": "struct ERC721A.TokenOwnership memory"
                                              }
                                            },
                                            "id": 1504,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "addr",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1209,
                                            "src": "7155:14:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "arguments": [
                                              {
                                                "hexValue": "30",
                                                "id": 1507,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7181:1:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                },
                                                "value": "0"
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                }
                                              ],
                                              "id": 1506,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "7173:7:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": {
                                                "id": 1505,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7173:7:13",
                                                "typeDescriptions": {}
                                              }
                                            },
                                            "id": 1508,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "7173:10:13",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "7155:28:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "id": 1513,
                                        "nodeType": "IfStatement",
                                        "src": "7151:99:13",
                                        "trueBody": {
                                          "id": 1512,
                                          "nodeType": "Block",
                                          "src": "7185:65:13",
                                          "statements": [
                                            {
                                              "expression": {
                                                "id": 1510,
                                                "name": "ownership",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1495,
                                                "src": "7218:9:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                                }
                                              },
                                              "functionReturnParameters": 1480,
                                              "id": 1511,
                                              "nodeType": "Return",
                                              "src": "7211:16:13"
                                            }
                                          ]
                                        }
                                      },
                                      {
                                        "body": {
                                          "id": 1535,
                                          "nodeType": "Block",
                                          "src": "7560:242:13",
                                          "statements": [
                                            {
                                              "expression": {
                                                "id": 1516,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "--",
                                                "prefix": false,
                                                "src": "7586:6:13",
                                                "subExpression": {
                                                  "id": 1515,
                                                  "name": "curr",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1482,
                                                  "src": "7586:4:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "id": 1517,
                                              "nodeType": "ExpressionStatement",
                                              "src": "7586:6:13"
                                            },
                                            {
                                              "expression": {
                                                "id": 1522,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                  "id": 1518,
                                                  "name": "ownership",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1495,
                                                  "src": "7618:9:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                    "typeString": "struct ERC721A.TokenOwnership memory"
                                                  }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                  "baseExpression": {
                                                    "id": 1519,
                                                    "name": "_ownerships",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1236,
                                                    "src": "7630:11:13",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                                    }
                                                  },
                                                  "id": 1521,
                                                  "indexExpression": {
                                                    "id": 1520,
                                                    "name": "curr",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1482,
                                                    "src": "7642:4:13",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "IndexAccess",
                                                  "src": "7630:17:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                                  }
                                                },
                                                "src": "7618:29:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                                }
                                              },
                                              "id": 1523,
                                              "nodeType": "ExpressionStatement",
                                              "src": "7618:29:13"
                                            },
                                            {
                                              "condition": {
                                                "commonType": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                "id": 1530,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "expression": {
                                                    "id": 1524,
                                                    "name": "ownership",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 1495,
                                                    "src": "7677:9:13",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                      "typeString": "struct ERC721A.TokenOwnership memory"
                                                    }
                                                  },
                                                  "id": 1525,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberName": "addr",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 1209,
                                                  "src": "7677:14:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                  "arguments": [
                                                    {
                                                      "hexValue": "30",
                                                      "id": 1528,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "7703:1:13",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                      },
                                                      "value": "0"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                      }
                                                    ],
                                                    "id": 1527,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "7695:7:13",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_address_$",
                                                      "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                      "id": 1526,
                                                      "name": "address",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "7695:7:13",
                                                      "typeDescriptions": {}
                                                    }
                                                  },
                                                  "id": 1529,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "7695:10:13",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                  }
                                                },
                                                "src": "7677:28:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "id": 1534,
                                              "nodeType": "IfStatement",
                                              "src": "7673:107:13",
                                              "trueBody": {
                                                "id": 1533,
                                                "nodeType": "Block",
                                                "src": "7707:73:13",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "id": 1531,
                                                      "name": "ownership",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 1495,
                                                      "src": "7744:9:13",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                        "typeString": "struct ERC721A.TokenOwnership memory"
                                                      }
                                                    },
                                                    "functionReturnParameters": 1480,
                                                    "id": 1532,
                                                    "nodeType": "Return",
                                                    "src": "7737:16:13"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "condition": {
                                          "hexValue": "74727565",
                                          "id": 1514,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "bool",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "7554:4:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          "value": "true"
                                        },
                                        "id": 1536,
                                        "nodeType": "WhileStatement",
                                        "src": "7547:255:13"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1542,
                            "name": "OwnerQueryForNonexistentToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1180,
                            "src": "7860:29:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 1543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7860:31:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1544,
                        "nodeType": "RevertStatement",
                        "src": "7853:38:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1473,
                    "nodeType": "StructuredDocumentation",
                    "src": "6625:185:13",
                    "text": " Gas spent here starts off proportional to the maximum mint batch size.\n It gradually moves to O(1) as tokens get transferred around in the collection over time."
                  },
                  "id": 1546,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownershipOf",
                  "nameLocation": "6824:11:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1476,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1475,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "6844:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1546,
                        "src": "6836:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1474,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6836:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6835:17:13"
                  },
                  "returnParameters": {
                    "id": 1480,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1479,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1546,
                        "src": "6876:21:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                          "typeString": "struct ERC721A.TokenOwnership"
                        },
                        "typeName": {
                          "id": 1478,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1477,
                            "name": "TokenOwnership",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1214,
                            "src": "6876:14:13"
                          },
                          "referencedDeclaration": 1214,
                          "src": "6876:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage_ptr",
                            "typeString": "struct ERC721A.TokenOwnership"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6875:23:13"
                  },
                  "scope": 2461,
                  "src": "6815:1083:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    153
                  ],
                  "body": {
                    "id": 1560,
                    "nodeType": "Block",
                    "src": "8028:49:13",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 1556,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1549,
                                "src": "8057:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1555,
                              "name": "ownershipOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1546,
                              "src": "8045:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_struct$_TokenOwnership_$1214_memory_ptr_$",
                                "typeString": "function (uint256) view returns (struct ERC721A.TokenOwnership memory)"
                              }
                            },
                            "id": 1557,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8045:20:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                              "typeString": "struct ERC721A.TokenOwnership memory"
                            }
                          },
                          "id": 1558,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1209,
                          "src": "8045:25:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1554,
                        "id": 1559,
                        "nodeType": "Return",
                        "src": "8038:32:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1547,
                    "nodeType": "StructuredDocumentation",
                    "src": "7904:46:13",
                    "text": " @dev See {IERC721-ownerOf}."
                  },
                  "functionSelector": "6352211e",
                  "id": 1561,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ownerOf",
                  "nameLocation": "7964:7:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1551,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8001:8:13"
                  },
                  "parameters": {
                    "id": 1550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1549,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "7980:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1561,
                        "src": "7972:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7972:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7971:17:13"
                  },
                  "returnParameters": {
                    "id": 1554,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1553,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1561,
                        "src": "8019:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1552,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8019:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8018:9:13"
                  },
                  "scope": 2461,
                  "src": "7955:122:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    281
                  ],
                  "body": {
                    "id": 1570,
                    "nodeType": "Block",
                    "src": "8208:29:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 1568,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1229,
                          "src": "8225:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1567,
                        "id": 1569,
                        "nodeType": "Return",
                        "src": "8218:12:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1562,
                    "nodeType": "StructuredDocumentation",
                    "src": "8083:51:13",
                    "text": " @dev See {IERC721Metadata-name}."
                  },
                  "functionSelector": "06fdde03",
                  "id": 1571,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nameLocation": "8148:4:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1564,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8175:8:13"
                  },
                  "parameters": {
                    "id": 1563,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8152:2:13"
                  },
                  "returnParameters": {
                    "id": 1567,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1566,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1571,
                        "src": "8193:13:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1565,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8193:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8192:15:13"
                  },
                  "scope": 2461,
                  "src": "8139:98:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    287
                  ],
                  "body": {
                    "id": 1580,
                    "nodeType": "Block",
                    "src": "8372:31:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 1578,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1231,
                          "src": "8389:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1577,
                        "id": 1579,
                        "nodeType": "Return",
                        "src": "8382:14:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1572,
                    "nodeType": "StructuredDocumentation",
                    "src": "8243:53:13",
                    "text": " @dev See {IERC721Metadata-symbol}."
                  },
                  "functionSelector": "95d89b41",
                  "id": 1581,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nameLocation": "8310:6:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1574,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8339:8:13"
                  },
                  "parameters": {
                    "id": 1573,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8316:2:13"
                  },
                  "returnParameters": {
                    "id": 1577,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1576,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1581,
                        "src": "8357:13:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1575,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8357:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8356:15:13"
                  },
                  "scope": 2461,
                  "src": "8301:102:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    295
                  ],
                  "body": {
                    "id": 1623,
                    "nodeType": "Block",
                    "src": "8557:225:13",
                    "statements": [
                      {
                        "condition": {
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "8571:17:13",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1591,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1584,
                                "src": "8580:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1590,
                              "name": "_exists",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1850,
                              "src": "8572:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256) view returns (bool)"
                              }
                            },
                            "id": 1592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8572:16:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1597,
                        "nodeType": "IfStatement",
                        "src": "8567:59:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1594,
                              "name": "URIQueryForNonexistentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1192,
                              "src": "8597:27:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8597:29:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1596,
                          "nodeType": "RevertStatement",
                          "src": "8590:36:13"
                        }
                      },
                      {
                        "assignments": [
                          1599
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1599,
                            "mutability": "mutable",
                            "name": "baseURI",
                            "nameLocation": "8651:7:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 1623,
                            "src": "8637:21:13",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1598,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "8637:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1602,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1600,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1633,
                            "src": "8661:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () view returns (string memory)"
                            }
                          },
                          "id": 1601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8661:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8637:34:13"
                      },
                      {
                        "expression": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 1605,
                                    "name": "baseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1599,
                                    "src": "8694:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 1604,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8688:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 1603,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8688:5:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1606,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8688:14:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 1607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "8688:21:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 1608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8713:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "8688:26:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "hexValue": "",
                            "id": 1620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8773:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "id": 1621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "8688:87:13",
                          "trueExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 1614,
                                    "name": "baseURI",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1599,
                                    "src": "8741:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "id": 1615,
                                        "name": "tokenId",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1584,
                                        "src": "8750:7:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1616,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toString",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 698,
                                      "src": "8750:16:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (string memory)"
                                      }
                                    },
                                    "id": 1617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8750:18:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1612,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "8724:3:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 1613,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "8724:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 1618,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8724:45:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 1611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8717:6:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 1610,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "8717:6:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1619,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8717:53:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 1589,
                        "id": 1622,
                        "nodeType": "Return",
                        "src": "8681:94:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1582,
                    "nodeType": "StructuredDocumentation",
                    "src": "8409:55:13",
                    "text": " @dev See {IERC721Metadata-tokenURI}."
                  },
                  "functionSelector": "c87b56dd",
                  "id": 1624,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tokenURI",
                  "nameLocation": "8478:8:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1586,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "8524:8:13"
                  },
                  "parameters": {
                    "id": 1585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1584,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "8495:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "8487:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1583,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8487:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8486:17:13"
                  },
                  "returnParameters": {
                    "id": 1589,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1588,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1624,
                        "src": "8542:13:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1587,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8542:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8541:15:13"
                  },
                  "scope": 2461,
                  "src": "8469:313:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1632,
                    "nodeType": "Block",
                    "src": "9089:26:13",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "",
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9106:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        },
                        "functionReturnParameters": 1629,
                        "id": 1631,
                        "nodeType": "Return",
                        "src": "9099:9:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1625,
                    "nodeType": "StructuredDocumentation",
                    "src": "8788:230:13",
                    "text": " @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\n token will be the concatenation of the `baseURI` and the `tokenId`. Empty\n by default, can be overriden in child contracts."
                  },
                  "id": 1633,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_baseURI",
                  "nameLocation": "9032:8:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9040:2:13"
                  },
                  "returnParameters": {
                    "id": 1629,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1628,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1633,
                        "src": "9074:13:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1627,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "9074:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9073:15:13"
                  },
                  "scope": 2461,
                  "src": "9023:92:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    181
                  ],
                  "body": {
                    "id": 1678,
                    "nodeType": "Block",
                    "src": "9234:300:13",
                    "statements": [
                      {
                        "assignments": [
                          1643
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1643,
                            "mutability": "mutable",
                            "name": "owner",
                            "nameLocation": "9252:5:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 1678,
                            "src": "9244:13:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1642,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9244:7:13",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1648,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1646,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1638,
                              "src": "9276:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 1644,
                              "name": "ERC721A",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2461,
                              "src": "9260:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC721A_$2461_$",
                                "typeString": "type(contract ERC721A)"
                              }
                            },
                            "id": 1645,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "ownerOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1561,
                            "src": "9260:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 1647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9260:24:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9244:40:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1649,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "9298:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 1650,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1643,
                            "src": "9304:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9298:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1655,
                        "nodeType": "IfStatement",
                        "src": "9294:48:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1652,
                              "name": "ApprovalToCurrentOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1164,
                              "src": "9318:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9318:24:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1654,
                          "nodeType": "RevertStatement",
                          "src": "9311:31:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1659,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1656,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "9357:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 1657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9357:12:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1658,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1643,
                              "src": "9373:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "9357:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 1665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "9382:38:13",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 1661,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1643,
                                  "src": "9400:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 1662,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 603,
                                    "src": "9407:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 1663,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "9407:12:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1660,
                                "name": "isApprovedForAll",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1753,
                                "src": "9383:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address,address) view returns (bool)"
                                }
                              },
                              "id": 1664,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9383:37:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "9357:63:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1671,
                        "nodeType": "IfStatement",
                        "src": "9353:136:13",
                        "trueBody": {
                          "id": 1670,
                          "nodeType": "Block",
                          "src": "9422:67:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1667,
                                  "name": "ApprovalCallerNotOwnerNorApproved",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1158,
                                  "src": "9443:33:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 1668,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9443:35:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1669,
                              "nodeType": "RevertStatement",
                              "src": "9436:42:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1673,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1636,
                              "src": "9508:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1674,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1638,
                              "src": "9512:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1675,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1643,
                              "src": "9521:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1672,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2379,
                            "src": "9499:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 1676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9499:28:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1677,
                        "nodeType": "ExpressionStatement",
                        "src": "9499:28:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1634,
                    "nodeType": "StructuredDocumentation",
                    "src": "9121:46:13",
                    "text": " @dev See {IERC721-approve}."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1679,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nameLocation": "9181:7:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1640,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9225:8:13"
                  },
                  "parameters": {
                    "id": 1639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1636,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "9197:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1679,
                        "src": "9189:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1635,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9189:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1638,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "9209:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1679,
                        "src": "9201:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1637,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9201:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9188:29:13"
                  },
                  "returnParameters": {
                    "id": 1641,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9234:0:13"
                  },
                  "scope": 2461,
                  "src": "9172:362:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    189
                  ],
                  "body": {
                    "id": 1700,
                    "nodeType": "Block",
                    "src": "9672:123:13",
                    "statements": [
                      {
                        "condition": {
                          "id": 1691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9686:17:13",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 1689,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1682,
                                "src": "9695:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1688,
                              "name": "_exists",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1850,
                              "src": "9687:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256) view returns (bool)"
                              }
                            },
                            "id": 1690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9687:16:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1695,
                        "nodeType": "IfStatement",
                        "src": "9682:64:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1692,
                              "name": "ApprovalQueryForNonexistentToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1160,
                              "src": "9712:32:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1693,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9712:34:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1694,
                          "nodeType": "RevertStatement",
                          "src": "9705:41:13"
                        }
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "id": 1696,
                            "name": "_tokenApprovals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1245,
                            "src": "9764:15:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                              "typeString": "mapping(uint256 => address)"
                            }
                          },
                          "id": 1698,
                          "indexExpression": {
                            "id": 1697,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1682,
                            "src": "9780:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9764:24:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 1687,
                        "id": 1699,
                        "nodeType": "Return",
                        "src": "9757:31:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1680,
                    "nodeType": "StructuredDocumentation",
                    "src": "9540:50:13",
                    "text": " @dev See {IERC721-getApproved}."
                  },
                  "functionSelector": "081812fc",
                  "id": 1701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getApproved",
                  "nameLocation": "9604:11:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1684,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9645:8:13"
                  },
                  "parameters": {
                    "id": 1683,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1682,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "9624:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1701,
                        "src": "9616:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1681,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9616:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9615:17:13"
                  },
                  "returnParameters": {
                    "id": 1687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1686,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1701,
                        "src": "9663:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1685,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9663:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9662:9:13"
                  },
                  "scope": 2461,
                  "src": "9595:200:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    197
                  ],
                  "body": {
                    "id": 1734,
                    "nodeType": "Block",
                    "src": "9938:198:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1710,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1704,
                            "src": "9952:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1711,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 603,
                              "src": "9964:10:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 1712,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9964:12:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9952:24:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1717,
                        "nodeType": "IfStatement",
                        "src": "9948:54:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1714,
                              "name": "ApproveToCaller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1162,
                              "src": "9985:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9985:17:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1716,
                          "nodeType": "RevertStatement",
                          "src": "9978:24:13"
                        }
                      },
                      {
                        "expression": {
                          "id": 1725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1718,
                                "name": "_operatorApprovals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1251,
                                "src": "10013:18:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1722,
                              "indexExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1719,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 603,
                                  "src": "10032:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1720,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10032:12:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10013:32:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1723,
                            "indexExpression": {
                              "id": 1721,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1704,
                              "src": "10046:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10013:42:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1724,
                            "name": "approved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1706,
                            "src": "10058:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10013:53:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1726,
                        "nodeType": "ExpressionStatement",
                        "src": "10013:53:13"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1728,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "10096:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 1729,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10096:12:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1730,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1704,
                              "src": "10110:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1731,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1706,
                              "src": "10120:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1727,
                            "name": "ApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 137,
                            "src": "10081:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 1732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10081:48:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1733,
                        "nodeType": "EmitStatement",
                        "src": "10076:53:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1702,
                    "nodeType": "StructuredDocumentation",
                    "src": "9801:56:13",
                    "text": " @dev See {IERC721-setApprovalForAll}."
                  },
                  "functionSelector": "a22cb465",
                  "id": 1735,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "9871:17:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1708,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "9929:8:13"
                  },
                  "parameters": {
                    "id": 1707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1704,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "9897:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1735,
                        "src": "9889:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1703,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9889:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1706,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "9912:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1735,
                        "src": "9907:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1705,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9907:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9888:33:13"
                  },
                  "returnParameters": {
                    "id": 1709,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9938:0:13"
                  },
                  "scope": 2461,
                  "src": "9862:274:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    207
                  ],
                  "body": {
                    "id": 1752,
                    "nodeType": "Block",
                    "src": "10305:59:13",
                    "statements": [
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 1746,
                              "name": "_operatorApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1251,
                              "src": "10322:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 1748,
                            "indexExpression": {
                              "id": 1747,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1738,
                              "src": "10341:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10322:25:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1750,
                          "indexExpression": {
                            "id": 1749,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1740,
                            "src": "10348:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10322:35:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1745,
                        "id": 1751,
                        "nodeType": "Return",
                        "src": "10315:42:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1736,
                    "nodeType": "StructuredDocumentation",
                    "src": "10142:55:13",
                    "text": " @dev See {IERC721-isApprovedForAll}."
                  },
                  "functionSelector": "e985e9c5",
                  "id": 1753,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "10211:16:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1742,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "10281:8:13"
                  },
                  "parameters": {
                    "id": 1741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1738,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "10236:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1753,
                        "src": "10228:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1737,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10228:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1740,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "10251:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1753,
                        "src": "10243:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1739,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10243:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10227:33:13"
                  },
                  "returnParameters": {
                    "id": 1745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1744,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1753,
                        "src": "10299:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1743,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "10299:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10298:6:13"
                  },
                  "scope": 2461,
                  "src": "10202:162:13",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    173
                  ],
                  "body": {
                    "id": 1770,
                    "nodeType": "Block",
                    "src": "10545:45:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1765,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1756,
                              "src": "10565:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1766,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1758,
                              "src": "10571:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1767,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "10575:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1764,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2215,
                            "src": "10555:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10555:28:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1769,
                        "nodeType": "ExpressionStatement",
                        "src": "10555:28:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1754,
                    "nodeType": "StructuredDocumentation",
                    "src": "10370:51:13",
                    "text": " @dev See {IERC721-transferFrom}."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1771,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nameLocation": "10435:12:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1762,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "10536:8:13"
                  },
                  "parameters": {
                    "id": 1761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1756,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10465:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1771,
                        "src": "10457:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1755,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10457:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1758,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10487:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1771,
                        "src": "10479:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1757,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10479:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1760,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10507:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1771,
                        "src": "10499:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1759,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10499:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10447:73:13"
                  },
                  "returnParameters": {
                    "id": 1763,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10545:0:13"
                  },
                  "scope": 2461,
                  "src": "10426:164:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    163
                  ],
                  "body": {
                    "id": 1789,
                    "nodeType": "Block",
                    "src": "10779:56:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1783,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1774,
                              "src": "10806:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1784,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1776,
                              "src": "10812:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1785,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1778,
                              "src": "10816:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 1786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10825:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 1782,
                            "name": "safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1790,
                              1826
                            ],
                            "referencedDeclaration": 1826,
                            "src": "10789:16:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,bytes memory)"
                            }
                          },
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10789:39:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1788,
                        "nodeType": "ExpressionStatement",
                        "src": "10789:39:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1772,
                    "nodeType": "StructuredDocumentation",
                    "src": "10596:55:13",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "42842e0e",
                  "id": 1790,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "10665:16:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1780,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "10770:8:13"
                  },
                  "parameters": {
                    "id": 1779,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1774,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10699:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1790,
                        "src": "10691:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1773,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10691:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1776,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10721:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1790,
                        "src": "10713:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1775,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10713:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1778,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10741:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1790,
                        "src": "10733:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1777,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10733:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10681:73:13"
                  },
                  "returnParameters": {
                    "id": 1781,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10779:0:13"
                  },
                  "scope": 2461,
                  "src": "10656:179:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    219
                  ],
                  "body": {
                    "id": 1825,
                    "nodeType": "Block",
                    "src": "11052:208:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1804,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "11072:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1805,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1795,
                              "src": "11078:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1806,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1797,
                              "src": "11082:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1803,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2215,
                            "src": "11062:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11062:28:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1808,
                        "nodeType": "ExpressionStatement",
                        "src": "11062:28:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 1809,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1795,
                                "src": "11104:2:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1810,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 314,
                              "src": "11104:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                                "typeString": "function (address) view returns (bool)"
                              }
                            },
                            "id": 1811,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11104:15:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 1818,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "11123:57:13",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 1813,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1793,
                                  "src": "11155:4:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1814,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1795,
                                  "src": "11161:2:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1815,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1797,
                                  "src": "11165:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 1816,
                                  "name": "_data",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1799,
                                  "src": "11174:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 1812,
                                "name": "_checkContractOnERC721Received",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2434,
                                "src": "11124:30:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                                }
                              },
                              "id": 1817,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11124:56:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11104:76:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1824,
                        "nodeType": "IfStatement",
                        "src": "11100:154:13",
                        "trueBody": {
                          "id": 1823,
                          "nodeType": "Block",
                          "src": "11182:72:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1820,
                                  "name": "TransferToNonERC721ReceiverImplementer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1188,
                                  "src": "11203:38:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 1821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11203:40:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1822,
                              "nodeType": "RevertStatement",
                              "src": "11196:47:13"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1791,
                    "nodeType": "StructuredDocumentation",
                    "src": "10841:55:13",
                    "text": " @dev See {IERC721-safeTransferFrom}."
                  },
                  "functionSelector": "b88d4fde",
                  "id": 1826,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "10910:16:13",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1801,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "11043:8:13"
                  },
                  "parameters": {
                    "id": 1800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1793,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10944:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1826,
                        "src": "10936:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1792,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10936:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1795,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10966:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1826,
                        "src": "10958:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1794,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10958:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1797,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "10986:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1826,
                        "src": "10978:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1796,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10978:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1799,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "11016:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1826,
                        "src": "11003:18:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1798,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "11003:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10926:101:13"
                  },
                  "returnParameters": {
                    "id": 1802,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11052:0:13"
                  },
                  "scope": 2461,
                  "src": "10901:359:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1849,
                    "nodeType": "Block",
                    "src": "11569:121:13",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1847,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1841,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1834,
                                  "name": "_startTokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1281,
                                  "src": "11586:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11586:15:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 1836,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1829,
                                "src": "11605:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11586:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1838,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1829,
                                "src": "11616:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 1839,
                                "name": "_currentIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1225,
                                "src": "11626:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11616:23:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "11586:53:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 1846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "11655:28:13",
                            "subExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 1842,
                                  "name": "_ownerships",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1236,
                                  "src": "11656:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                    "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                  }
                                },
                                "id": 1844,
                                "indexExpression": {
                                  "id": 1843,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1829,
                                  "src": "11668:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11656:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                  "typeString": "struct ERC721A.TokenOwnership storage ref"
                                }
                              },
                              "id": 1845,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "burned",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1213,
                              "src": "11656:27:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11586:97:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1833,
                        "id": 1848,
                        "nodeType": "Return",
                        "src": "11579:104:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1827,
                    "nodeType": "StructuredDocumentation",
                    "src": "11266:235:13",
                    "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),"
                  },
                  "id": 1850,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_exists",
                  "nameLocation": "11515:7:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1830,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1829,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "11531:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1850,
                        "src": "11523:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1828,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11523:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11522:17:13"
                  },
                  "returnParameters": {
                    "id": 1833,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1832,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1850,
                        "src": "11563:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1831,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "11563:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11562:6:13"
                  },
                  "scope": 2461,
                  "src": "11506:184:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1863,
                    "nodeType": "Block",
                    "src": "11754:44:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1858,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1852,
                              "src": "11774:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1859,
                              "name": "quantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1854,
                              "src": "11778:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 1860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11788:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 1857,
                            "name": "_safeMint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              1864,
                              1882
                            ],
                            "referencedDeclaration": 1882,
                            "src": "11764:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,bytes memory)"
                            }
                          },
                          "id": 1861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11764:27:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1862,
                        "nodeType": "ExpressionStatement",
                        "src": "11764:27:13"
                      }
                    ]
                  },
                  "id": 1864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "11705:9:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1855,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1852,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11723:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1864,
                        "src": "11715:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1851,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11715:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1854,
                        "mutability": "mutable",
                        "name": "quantity",
                        "nameLocation": "11735:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1864,
                        "src": "11727:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1853,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11727:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11714:30:13"
                  },
                  "returnParameters": {
                    "id": 1856,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11754:0:13"
                  },
                  "scope": 2461,
                  "src": "11696:102:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1881,
                    "nodeType": "Block",
                    "src": "12257:49:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1875,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1867,
                              "src": "12273:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1876,
                              "name": "quantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1869,
                              "src": "12277:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1877,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1871,
                              "src": "12287:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 1878,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12294:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1874,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2049,
                            "src": "12267:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                              "typeString": "function (address,uint256,bytes memory,bool)"
                            }
                          },
                          "id": 1879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12267:32:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1880,
                        "nodeType": "ExpressionStatement",
                        "src": "12267:32:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1865,
                    "nodeType": "StructuredDocumentation",
                    "src": "11804:340:13",
                    "text": " @dev Safely mints `quantity` tokens and transfers them to `to`.\n Requirements:\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.\n - `quantity` must be greater than 0.\n Emits a {Transfer} event."
                  },
                  "id": 1882,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeMint",
                  "nameLocation": "12158:9:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1867,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12185:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1882,
                        "src": "12177:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1866,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12177:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1869,
                        "mutability": "mutable",
                        "name": "quantity",
                        "nameLocation": "12205:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1882,
                        "src": "12197:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1868,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12197:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1871,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "12236:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 1882,
                        "src": "12223:18:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1870,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "12223:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12167:80:13"
                  },
                  "returnParameters": {
                    "id": 1873,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12257:0:13"
                  },
                  "scope": 2461,
                  "src": "12149:157:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2048,
                    "nodeType": "Block",
                    "src": "12676:1610:13",
                    "statements": [
                      {
                        "assignments": [
                          1895
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1895,
                            "mutability": "mutable",
                            "name": "startTokenId",
                            "nameLocation": "12694:12:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2048,
                            "src": "12686:20:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1894,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12686:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1897,
                        "initialValue": {
                          "id": 1896,
                          "name": "_currentIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1225,
                          "src": "12709:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12686:36:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1903,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1898,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1885,
                            "src": "12736:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12750:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12742:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1899,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12742:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1902,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12742:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12736:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1907,
                        "nodeType": "IfStatement",
                        "src": "12732:48:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1904,
                              "name": "MintToZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1174,
                              "src": "12761:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1905,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12761:19:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1906,
                          "nodeType": "RevertStatement",
                          "src": "12754:26:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1908,
                            "name": "quantity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1887,
                            "src": "12794:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 1909,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12806:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12794:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1914,
                        "nodeType": "IfStatement",
                        "src": "12790:44:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1911,
                              "name": "MintZeroQuantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1176,
                              "src": "12816:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 1912,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12816:18:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1913,
                          "nodeType": "RevertStatement",
                          "src": "12809:25:13"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1918,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12875:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12867:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1916,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12867:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12867:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1920,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1885,
                              "src": "12879:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1921,
                              "name": "startTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1895,
                              "src": "12883:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1922,
                              "name": "quantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1887,
                              "src": "12897:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1915,
                            "name": "_beforeTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2447,
                            "src": "12845:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 1923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12845:61:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1924,
                        "nodeType": "ExpressionStatement",
                        "src": "12845:61:13"
                      },
                      {
                        "id": 2037,
                        "nodeType": "UncheckedBlock",
                        "src": "13153:1057:13",
                        "statements": [
                          {
                            "expression": {
                              "id": 1933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 1925,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "13177:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 1927,
                                  "indexExpression": {
                                    "id": 1926,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1885,
                                    "src": "13190:2:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "13177:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 1928,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1216,
                                "src": "13177:24:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 1931,
                                    "name": "quantity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1887,
                                    "src": "13212:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1930,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13205:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 1929,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13205:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13205:16:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "13177:44:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1934,
                            "nodeType": "ExpressionStatement",
                            "src": "13177:44:13"
                          },
                          {
                            "expression": {
                              "id": 1943,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 1935,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "13235:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 1937,
                                  "indexExpression": {
                                    "id": 1936,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1885,
                                    "src": "13248:2:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "13235:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 1938,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "numberMinted",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1218,
                                "src": "13235:29:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "id": 1941,
                                    "name": "quantity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1887,
                                    "src": "13275:8:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1940,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13268:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 1939,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13268:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13268:16:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "13235:49:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1944,
                            "nodeType": "ExpressionStatement",
                            "src": "13235:49:13"
                          },
                          {
                            "expression": {
                              "id": 1950,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 1945,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "13299:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 1947,
                                  "indexExpression": {
                                    "id": 1946,
                                    "name": "startTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1895,
                                    "src": "13311:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "13299:25:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 1948,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "13299:30:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "id": 1949,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1885,
                                "src": "13332:2:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "13299:35:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 1951,
                            "nodeType": "ExpressionStatement",
                            "src": "13299:35:13"
                          },
                          {
                            "expression": {
                              "id": 1961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 1952,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "13348:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 1954,
                                  "indexExpression": {
                                    "id": 1953,
                                    "name": "startTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1895,
                                    "src": "13360:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "13348:25:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 1955,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "startTimestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1211,
                                "src": "13348:40:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 1958,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "13398:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 1959,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "13398:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1957,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13391:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 1956,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13391:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1960,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13391:23:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "13348:66:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1962,
                            "nodeType": "ExpressionStatement",
                            "src": "13348:66:13"
                          },
                          {
                            "assignments": [
                              1964
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1964,
                                "mutability": "mutable",
                                "name": "updatedIndex",
                                "nameLocation": "13437:12:13",
                                "nodeType": "VariableDeclaration",
                                "scope": 2037,
                                "src": "13429:20:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1963,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13429:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1966,
                            "initialValue": {
                              "id": 1965,
                              "name": "startTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1895,
                              "src": "13452:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13429:35:13"
                          },
                          {
                            "assignments": [
                              1968
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 1968,
                                "mutability": "mutable",
                                "name": "end",
                                "nameLocation": "13486:3:13",
                                "nodeType": "VariableDeclaration",
                                "scope": 2037,
                                "src": "13478:11:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 1967,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13478:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 1972,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1969,
                                "name": "updatedIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1964,
                                "src": "13492:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 1970,
                                "name": "quantity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1887,
                                "src": "13507:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13492:23:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13478:37:13"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1973,
                                "name": "safe",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1891,
                                "src": "13534:4:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 1974,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1885,
                                    "src": "13542:2:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 1975,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isContract",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 314,
                                  "src": "13542:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                                    "typeString": "function (address) view returns (bool)"
                                  }
                                },
                                "id": 1976,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13542:15:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "13534:23:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 2031,
                              "nodeType": "Block",
                              "src": "14008:150:13",
                              "statements": [
                                {
                                  "body": {
                                    "id": 2026,
                                    "nodeType": "Block",
                                    "src": "14029:86:13",
                                    "statements": [
                                      {
                                        "eventCall": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "hexValue": "30",
                                                  "id": 2019,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "14073:1:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  },
                                                  "value": "0"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  }
                                                ],
                                                "id": 2018,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "14065:7:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 2017,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "14065:7:13",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 2020,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "14065:10:13",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 2021,
                                              "name": "to",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1885,
                                              "src": "14077:2:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 2023,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "UnaryOperation",
                                              "operator": "++",
                                              "prefix": false,
                                              "src": "14081:14:13",
                                              "subExpression": {
                                                "id": 2022,
                                                "name": "updatedIndex",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1964,
                                                "src": "14081:12:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "id": 2016,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 119,
                                            "src": "14056:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                              "typeString": "function (address,address,uint256)"
                                            }
                                          },
                                          "id": 2024,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "14056:40:13",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 2025,
                                        "nodeType": "EmitStatement",
                                        "src": "14051:45:13"
                                      }
                                    ]
                                  },
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2029,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2027,
                                      "name": "updatedIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1964,
                                      "src": "14123:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "id": 2028,
                                      "name": "end",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1968,
                                      "src": "14139:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "14123:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2030,
                                  "nodeType": "DoWhileStatement",
                                  "src": "14026:118:13"
                                }
                              ]
                            },
                            "id": 2032,
                            "nodeType": "IfStatement",
                            "src": "13530:628:13",
                            "trueBody": {
                              "id": 2015,
                              "nodeType": "Block",
                              "src": "13559:443:13",
                              "statements": [
                                {
                                  "body": {
                                    "id": 2003,
                                    "nodeType": "Block",
                                    "src": "13580:277:13",
                                    "statements": [
                                      {
                                        "eventCall": {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "hexValue": "30",
                                                  "id": 1981,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "13624:1:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  },
                                                  "value": "0"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_rational_0_by_1",
                                                    "typeString": "int_const 0"
                                                  }
                                                ],
                                                "id": 1980,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "13616:7:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_address_$",
                                                  "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                  "id": 1979,
                                                  "name": "address",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "13616:7:13",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 1982,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "13616:10:13",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 1983,
                                              "name": "to",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1885,
                                              "src": "13628:2:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            {
                                              "id": 1984,
                                              "name": "updatedIndex",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1964,
                                              "src": "13632:12:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "id": 1978,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 119,
                                            "src": "13607:8:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                              "typeString": "function (address,address,uint256)"
                                            }
                                          },
                                          "id": 1985,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "13607:38:13",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 1986,
                                        "nodeType": "EmitStatement",
                                        "src": "13602:43:13"
                                      },
                                      {
                                        "condition": {
                                          "id": 1997,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "!",
                                          "prefix": true,
                                          "src": "13671:70:13",
                                          "subExpression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "hexValue": "30",
                                                    "id": 1990,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "13711:1:13",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_0_by_1",
                                                      "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_rational_0_by_1",
                                                      "typeString": "int_const 0"
                                                    }
                                                  ],
                                                  "id": 1989,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "nodeType": "ElementaryTypeNameExpression",
                                                  "src": "13703:7:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                  },
                                                  "typeName": {
                                                    "id": 1988,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "13703:7:13",
                                                    "typeDescriptions": {}
                                                  }
                                                },
                                                "id": 1991,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13703:10:13",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 1992,
                                                "name": "to",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1885,
                                                "src": "13715:2:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 1994,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "++",
                                                "prefix": false,
                                                "src": "13719:14:13",
                                                "subExpression": {
                                                  "id": 1993,
                                                  "name": "updatedIndex",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1964,
                                                  "src": "13719:12:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              {
                                                "id": 1995,
                                                "name": "_data",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1889,
                                                "src": "13735:5:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "id": 1987,
                                              "name": "_checkContractOnERC721Received",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2434,
                                              "src": "13672:30:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                                                "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                                              }
                                            },
                                            "id": 1996,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "13672:69:13",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "id": 2002,
                                        "nodeType": "IfStatement",
                                        "src": "13667:172:13",
                                        "trueBody": {
                                          "id": 2001,
                                          "nodeType": "Block",
                                          "src": "13743:96:13",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [],
                                                "expression": {
                                                  "argumentTypes": [],
                                                  "id": 1998,
                                                  "name": "TransferToNonERC721ReceiverImplementer",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1188,
                                                  "src": "13776:38:13",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                                    "typeString": "function () pure"
                                                  }
                                                },
                                                "id": 1999,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "13776:40:13",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_tuple$__$",
                                                  "typeString": "tuple()"
                                                }
                                              },
                                              "id": 2000,
                                              "nodeType": "RevertStatement",
                                              "src": "13769:47:13"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2006,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2004,
                                      "name": "updatedIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1964,
                                      "src": "13865:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "id": 2005,
                                      "name": "end",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1968,
                                      "src": "13881:3:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13865:19:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2007,
                                  "nodeType": "DoWhileStatement",
                                  "src": "13577:309:13"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2010,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2008,
                                      "name": "_currentIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1225,
                                      "src": "13948:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "id": 2009,
                                      "name": "startTokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1895,
                                      "src": "13965:12:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13948:29:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2014,
                                  "nodeType": "IfStatement",
                                  "src": "13944:43:13",
                                  "trueBody": {
                                    "expression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 2011,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "13979:6:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 2012,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "13979:8:13",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 2013,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13979:8:13"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 2035,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2033,
                                "name": "_currentIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1225,
                                "src": "14171:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "id": 2034,
                                "name": "updatedIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1964,
                                "src": "14187:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "14171:28:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2036,
                            "nodeType": "ExpressionStatement",
                            "src": "14171:28:13"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2041,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14248:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2040,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14240:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2039,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14240:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2042,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14240:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2043,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1885,
                              "src": "14252:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2044,
                              "name": "startTokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1895,
                              "src": "14256:12:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2045,
                              "name": "quantity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1887,
                              "src": "14270:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2038,
                            "name": "_afterTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "14219:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 2046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14219:60:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2047,
                        "nodeType": "ExpressionStatement",
                        "src": "14219:60:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1883,
                    "nodeType": "StructuredDocumentation",
                    "src": "12312:236:13",
                    "text": " @dev Mints `quantity` tokens and transfers them to `to`.\n Requirements:\n - `to` cannot be the zero address.\n - `quantity` must be greater than 0.\n Emits a {Transfer} event."
                  },
                  "id": 2049,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "12562:5:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1892,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1885,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12585:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2049,
                        "src": "12577:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1884,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12577:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1887,
                        "mutability": "mutable",
                        "name": "quantity",
                        "nameLocation": "12605:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2049,
                        "src": "12597:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1886,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12597:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1889,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "12636:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2049,
                        "src": "12623:18:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1888,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "12623:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1891,
                        "mutability": "mutable",
                        "name": "safe",
                        "nameLocation": "12656:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2049,
                        "src": "12651:9:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1890,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12651:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12567:99:13"
                  },
                  "returnParameters": {
                    "id": 1893,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12676:0:13"
                  },
                  "scope": 2461,
                  "src": "12553:1733:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2214,
                    "nodeType": "Block",
                    "src": "14628:1967:13",
                    "statements": [
                      {
                        "assignments": [
                          2061
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2061,
                            "mutability": "mutable",
                            "name": "prevOwnership",
                            "nameLocation": "14660:13:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2214,
                            "src": "14638:35:13",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                              "typeString": "struct ERC721A.TokenOwnership"
                            },
                            "typeName": {
                              "id": 2060,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2059,
                                "name": "TokenOwnership",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1214,
                                "src": "14638:14:13"
                              },
                              "referencedDeclaration": 1214,
                              "src": "14638:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage_ptr",
                                "typeString": "struct ERC721A.TokenOwnership"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2065,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2063,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2056,
                              "src": "14688:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2062,
                            "name": "ownershipOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1546,
                            "src": "14676:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_struct$_TokenOwnership_$1214_memory_ptr_$",
                              "typeString": "function (uint256) view returns (struct ERC721A.TokenOwnership memory)"
                            }
                          },
                          "id": 2064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14676:20:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                            "typeString": "struct ERC721A.TokenOwnership memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14638:58:13"
                      },
                      {
                        "assignments": [
                          2067
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2067,
                            "mutability": "mutable",
                            "name": "isApprovedOrOwner",
                            "nameLocation": "14712:17:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2214,
                            "src": "14707:22:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 2066,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "14707:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2088,
                        "initialValue": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 2079,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 2072,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 2068,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 603,
                                      "src": "14733:10:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 2069,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14733:12:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "expression": {
                                      "id": 2070,
                                      "name": "prevOwnership",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2061,
                                      "src": "14749:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                        "typeString": "struct ERC721A.TokenOwnership memory"
                                      }
                                    },
                                    "id": 2071,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1209,
                                    "src": "14749:18:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "14733:34:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 2074,
                                        "name": "prevOwnership",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2061,
                                        "src": "14800:13:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                          "typeString": "struct ERC721A.TokenOwnership memory"
                                        }
                                      },
                                      "id": 2075,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "addr",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 1209,
                                      "src": "14800:18:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 2076,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 603,
                                        "src": "14820:10:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                          "typeString": "function () view returns (address)"
                                        }
                                      },
                                      "id": 2077,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "14820:12:13",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 2073,
                                    "name": "isApprovedForAll",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1753,
                                    "src": "14783:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                      "typeString": "function (address,address) view returns (bool)"
                                    }
                                  },
                                  "id": 2078,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14783:50:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "14733:100:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 2085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 2081,
                                      "name": "tokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2056,
                                      "src": "14861:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 2080,
                                    "name": "getApproved",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1701,
                                    "src": "14849:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                      "typeString": "function (uint256) view returns (address)"
                                    }
                                  },
                                  "id": 2082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14849:20:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 2083,
                                    "name": "_msgSender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 603,
                                    "src": "14873:10:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                      "typeString": "function () view returns (address)"
                                    }
                                  },
                                  "id": 2084,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14873:12:13",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "14849:36:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "14733:152:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 2087,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "14732:154:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14707:179:13"
                      },
                      {
                        "condition": {
                          "id": 2090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "14901:18:13",
                          "subExpression": {
                            "id": 2089,
                            "name": "isApprovedOrOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2067,
                            "src": "14902:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2094,
                        "nodeType": "IfStatement",
                        "src": "14897:66:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2091,
                              "name": "TransferCallerNotOwnerNorApproved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1184,
                              "src": "14928:33:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2092,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14928:35:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2093,
                          "nodeType": "RevertStatement",
                          "src": "14921:42:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2095,
                              "name": "prevOwnership",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2061,
                              "src": "14977:13:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                "typeString": "struct ERC721A.TokenOwnership memory"
                              }
                            },
                            "id": 2096,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1209,
                            "src": "14977:18:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 2097,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2052,
                            "src": "14999:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14977:26:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2102,
                        "nodeType": "IfStatement",
                        "src": "14973:67:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2099,
                              "name": "TransferFromIncorrectOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1186,
                              "src": "15012:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15012:28:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2101,
                          "nodeType": "RevertStatement",
                          "src": "15005:35:13"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2103,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2054,
                            "src": "15054:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15068:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15060:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2104,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15060:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2107,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15060:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "15054:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2112,
                        "nodeType": "IfStatement",
                        "src": "15050:52:13",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2109,
                              "name": "TransferToZeroAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1190,
                              "src": "15079:21:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 2110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15079:23:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 2111,
                          "nodeType": "RevertStatement",
                          "src": "15072:30:13"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2114,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2052,
                              "src": "15135:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2115,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2054,
                              "src": "15141:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2116,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2056,
                              "src": "15145:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 2117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15154:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 2113,
                            "name": "_beforeTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2447,
                            "src": "15113:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 2118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15113:43:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2119,
                        "nodeType": "ExpressionStatement",
                        "src": "15113:43:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2123,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "15235:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15227:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2121,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15227:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15227:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2125,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2056,
                              "src": "15239:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 2126,
                                "name": "prevOwnership",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2061,
                                "src": "15248:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                }
                              },
                              "id": 2127,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1209,
                              "src": "15248:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2120,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2379,
                            "src": "15218:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 2128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15218:49:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2129,
                        "nodeType": "ExpressionStatement",
                        "src": "15218:49:13"
                      },
                      {
                        "id": 2200,
                        "nodeType": "UncheckedBlock",
                        "src": "15533:961:13",
                        "statements": [
                          {
                            "expression": {
                              "id": 2135,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2130,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "15557:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 2132,
                                  "indexExpression": {
                                    "id": 2131,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2052,
                                    "src": "15570:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15557:18:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 2133,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1216,
                                "src": "15557:26:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 2134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15587:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "15557:31:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2136,
                            "nodeType": "ExpressionStatement",
                            "src": "15557:31:13"
                          },
                          {
                            "expression": {
                              "id": 2142,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2137,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "15602:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 2139,
                                  "indexExpression": {
                                    "id": 2138,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2054,
                                    "src": "15615:2:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15602:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 2140,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1216,
                                "src": "15602:24:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 2141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15630:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "15602:29:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2143,
                            "nodeType": "ExpressionStatement",
                            "src": "15602:29:13"
                          },
                          {
                            "expression": {
                              "id": 2149,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2144,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "15646:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2146,
                                  "indexExpression": {
                                    "id": 2145,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2056,
                                    "src": "15658:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15646:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2147,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "15646:25:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "id": 2148,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2054,
                                "src": "15674:2:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "15646:30:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2150,
                            "nodeType": "ExpressionStatement",
                            "src": "15646:30:13"
                          },
                          {
                            "expression": {
                              "id": 2160,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2151,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "15690:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2153,
                                  "indexExpression": {
                                    "id": 2152,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2056,
                                    "src": "15702:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "15690:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2154,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "startTimestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1211,
                                "src": "15690:35:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 2157,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "15735:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 2158,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "15735:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2156,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15728:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 2155,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15728:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15728:23:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "15690:61:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2161,
                            "nodeType": "ExpressionStatement",
                            "src": "15690:61:13"
                          },
                          {
                            "assignments": [
                              2163
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2163,
                                "mutability": "mutable",
                                "name": "nextTokenId",
                                "nameLocation": "16007:11:13",
                                "nodeType": "VariableDeclaration",
                                "scope": 2200,
                                "src": "15999:19:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2162,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15999:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2167,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2164,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2056,
                                "src": "16021:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 2165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "16031:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "16021:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "15999:33:13"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2168,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "16050:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2170,
                                  "indexExpression": {
                                    "id": 2169,
                                    "name": "nextTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2163,
                                    "src": "16062:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "16050:24:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2171,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "16050:29:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 2174,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16091:1:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 2173,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16083:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2172,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16083:7:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16083:10:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "16050:43:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2199,
                            "nodeType": "IfStatement",
                            "src": "16046:438:13",
                            "trueBody": {
                              "id": 2198,
                              "nodeType": "Block",
                              "src": "16095:389:13",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2179,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2177,
                                      "name": "nextTokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2163,
                                      "src": "16258:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "id": 2178,
                                      "name": "_currentIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1225,
                                      "src": "16272:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "16258:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2197,
                                  "nodeType": "IfStatement",
                                  "src": "16254:216:13",
                                  "trueBody": {
                                    "id": 2196,
                                    "nodeType": "Block",
                                    "src": "16287:183:13",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 2186,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "expression": {
                                              "baseExpression": {
                                                "id": 2180,
                                                "name": "_ownerships",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "16309:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                                  "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                                }
                                              },
                                              "id": 2182,
                                              "indexExpression": {
                                                "id": 2181,
                                                "name": "nextTokenId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2163,
                                                "src": "16321:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "16309:24:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                                "typeString": "struct ERC721A.TokenOwnership storage ref"
                                              }
                                            },
                                            "id": 2183,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "addr",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1209,
                                            "src": "16309:29:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "expression": {
                                              "id": 2184,
                                              "name": "prevOwnership",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2061,
                                              "src": "16341:13:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                "typeString": "struct ERC721A.TokenOwnership memory"
                                              }
                                            },
                                            "id": 2185,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "addr",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1209,
                                            "src": "16341:18:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "16309:50:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 2187,
                                        "nodeType": "ExpressionStatement",
                                        "src": "16309:50:13"
                                      },
                                      {
                                        "expression": {
                                          "id": 2194,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "expression": {
                                              "baseExpression": {
                                                "id": 2188,
                                                "name": "_ownerships",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "16381:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                                  "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                                }
                                              },
                                              "id": 2190,
                                              "indexExpression": {
                                                "id": 2189,
                                                "name": "nextTokenId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2163,
                                                "src": "16393:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "16381:24:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                                "typeString": "struct ERC721A.TokenOwnership storage ref"
                                              }
                                            },
                                            "id": 2191,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "startTimestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1211,
                                            "src": "16381:39:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "expression": {
                                              "id": 2192,
                                              "name": "prevOwnership",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2061,
                                              "src": "16423:13:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                "typeString": "struct ERC721A.TokenOwnership memory"
                                              }
                                            },
                                            "id": 2193,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "startTimestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1211,
                                            "src": "16423:28:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "src": "16381:70:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "id": 2195,
                                        "nodeType": "ExpressionStatement",
                                        "src": "16381:70:13"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2202,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2052,
                              "src": "16518:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2203,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2054,
                              "src": "16524:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2204,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2056,
                              "src": "16528:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2201,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 119,
                            "src": "16509:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 2205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16509:27:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2206,
                        "nodeType": "EmitStatement",
                        "src": "16504:32:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2208,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2052,
                              "src": "16567:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2209,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2054,
                              "src": "16573:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2210,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2056,
                              "src": "16577:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 2211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "16586:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 2207,
                            "name": "_afterTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "16546:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 2212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16546:42:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2213,
                        "nodeType": "ExpressionStatement",
                        "src": "16546:42:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2050,
                    "nodeType": "StructuredDocumentation",
                    "src": "14292:231:13",
                    "text": " @dev Transfers `tokenId` from `from` to `to`.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
                  },
                  "id": 2215,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nameLocation": "14537:9:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2057,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2052,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "14564:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2215,
                        "src": "14556:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2051,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14556:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2054,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "14586:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2215,
                        "src": "14578:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2053,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14578:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2056,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "14606:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2215,
                        "src": "14598:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2055,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14598:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14546:73:13"
                  },
                  "returnParameters": {
                    "id": 2058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14628:0:13"
                  },
                  "scope": 2461,
                  "src": "14528:2067:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2355,
                    "nodeType": "Block",
                    "src": "16861:1950:13",
                    "statements": [
                      {
                        "assignments": [
                          2223
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2223,
                            "mutability": "mutable",
                            "name": "prevOwnership",
                            "nameLocation": "16893:13:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2355,
                            "src": "16871:35:13",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                              "typeString": "struct ERC721A.TokenOwnership"
                            },
                            "typeName": {
                              "id": 2222,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2221,
                                "name": "TokenOwnership",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1214,
                                "src": "16871:14:13"
                              },
                              "referencedDeclaration": 1214,
                              "src": "16871:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage_ptr",
                                "typeString": "struct ERC721A.TokenOwnership"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2227,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 2225,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2218,
                              "src": "16921:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2224,
                            "name": "ownershipOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1546,
                            "src": "16909:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_struct$_TokenOwnership_$1214_memory_ptr_$",
                              "typeString": "function (uint256) view returns (struct ERC721A.TokenOwnership memory)"
                            }
                          },
                          "id": 2226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16909:20:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                            "typeString": "struct ERC721A.TokenOwnership memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16871:58:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2229,
                                "name": "prevOwnership",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2223,
                                "src": "16962:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                }
                              },
                              "id": 2230,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1209,
                              "src": "16962:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2233,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16990:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2232,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "16982:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2231,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "16982:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16982:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2235,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2218,
                              "src": "16994:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 2236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17003:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 2228,
                            "name": "_beforeTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2447,
                            "src": "16940:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 2237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16940:65:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2238,
                        "nodeType": "ExpressionStatement",
                        "src": "16940:65:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2242,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "17084:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "17076:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2240,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "17076:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2243,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17076:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2244,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2218,
                              "src": "17088:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 2245,
                                "name": "prevOwnership",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2223,
                                "src": "17097:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                }
                              },
                              "id": 2246,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1209,
                              "src": "17097:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2239,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2379,
                            "src": "17067:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 2247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17067:49:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2248,
                        "nodeType": "ExpressionStatement",
                        "src": "17067:49:13"
                      },
                      {
                        "id": 2329,
                        "nodeType": "UncheckedBlock",
                        "src": "17382:1137:13",
                        "statements": [
                          {
                            "expression": {
                              "id": 2255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2249,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "17406:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 2252,
                                  "indexExpression": {
                                    "expression": {
                                      "id": 2250,
                                      "name": "prevOwnership",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2223,
                                      "src": "17419:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                        "typeString": "struct ERC721A.TokenOwnership memory"
                                      }
                                    },
                                    "id": 2251,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1209,
                                    "src": "17419:18:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "17406:32:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 2253,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1216,
                                "src": "17406:40:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 2254,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17450:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "17406:45:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2256,
                            "nodeType": "ExpressionStatement",
                            "src": "17406:45:13"
                          },
                          {
                            "expression": {
                              "id": 2263,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2257,
                                    "name": "_addressData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1241,
                                    "src": "17465:12:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_AddressData_$1223_storage_$",
                                      "typeString": "mapping(address => struct ERC721A.AddressData storage ref)"
                                    }
                                  },
                                  "id": 2260,
                                  "indexExpression": {
                                    "expression": {
                                      "id": 2258,
                                      "name": "prevOwnership",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2223,
                                      "src": "17478:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                        "typeString": "struct ERC721A.TokenOwnership memory"
                                      }
                                    },
                                    "id": 2259,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1209,
                                    "src": "17478:18:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "17465:32:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AddressData_$1223_storage",
                                    "typeString": "struct ERC721A.AddressData storage ref"
                                  }
                                },
                                "id": 2261,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "numberBurned",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1220,
                                "src": "17465:45:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "hexValue": "31",
                                "id": 2262,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17514:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "17465:50:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2264,
                            "nodeType": "ExpressionStatement",
                            "src": "17465:50:13"
                          },
                          {
                            "expression": {
                              "id": 2271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2265,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "17611:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2267,
                                  "indexExpression": {
                                    "id": 2266,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2218,
                                    "src": "17623:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "17611:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2268,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "17611:25:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "expression": {
                                  "id": 2269,
                                  "name": "prevOwnership",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2223,
                                  "src": "17639:13:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                    "typeString": "struct ERC721A.TokenOwnership memory"
                                  }
                                },
                                "id": 2270,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "17639:18:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "17611:46:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2272,
                            "nodeType": "ExpressionStatement",
                            "src": "17611:46:13"
                          },
                          {
                            "expression": {
                              "id": 2282,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2273,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "17671:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2275,
                                  "indexExpression": {
                                    "id": 2274,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2218,
                                    "src": "17683:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "17671:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2276,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "startTimestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1211,
                                "src": "17671:35:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 2279,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "17716:5:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 2280,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "17716:15:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2278,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17709:6:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 2277,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17709:6:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2281,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17709:23:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "src": "17671:61:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 2283,
                            "nodeType": "ExpressionStatement",
                            "src": "17671:61:13"
                          },
                          {
                            "expression": {
                              "id": 2289,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2284,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "17746:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2286,
                                  "indexExpression": {
                                    "id": 2285,
                                    "name": "tokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2218,
                                    "src": "17758:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "17746:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2287,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "memberName": "burned",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1213,
                                "src": "17746:27:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "74727565",
                                "id": 2288,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17776:4:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "src": "17746:34:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2290,
                            "nodeType": "ExpressionStatement",
                            "src": "17746:34:13"
                          },
                          {
                            "assignments": [
                              2292
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2292,
                                "mutability": "mutable",
                                "name": "nextTokenId",
                                "nameLocation": "18032:11:13",
                                "nodeType": "VariableDeclaration",
                                "scope": 2329,
                                "src": "18024:19:13",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2291,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18024:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2296,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2293,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2218,
                                "src": "18046:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 2294,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18056:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "18046:11:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "18024:33:13"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 2297,
                                    "name": "_ownerships",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1236,
                                    "src": "18075:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                      "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                    }
                                  },
                                  "id": 2299,
                                  "indexExpression": {
                                    "id": 2298,
                                    "name": "nextTokenId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2292,
                                    "src": "18087:11:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "18075:24:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                    "typeString": "struct ERC721A.TokenOwnership storage ref"
                                  }
                                },
                                "id": 2300,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1209,
                                "src": "18075:29:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 2303,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18116:1:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 2302,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "18108:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 2301,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18108:7:13",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18108:10:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "18075:43:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2328,
                            "nodeType": "IfStatement",
                            "src": "18071:438:13",
                            "trueBody": {
                              "id": 2327,
                              "nodeType": "Block",
                              "src": "18120:389:13",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2306,
                                      "name": "nextTokenId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2292,
                                      "src": "18283:11:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "id": 2307,
                                      "name": "_currentIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1225,
                                      "src": "18297:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "18283:27:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2326,
                                  "nodeType": "IfStatement",
                                  "src": "18279:216:13",
                                  "trueBody": {
                                    "id": 2325,
                                    "nodeType": "Block",
                                    "src": "18312:183:13",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 2315,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "expression": {
                                              "baseExpression": {
                                                "id": 2309,
                                                "name": "_ownerships",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "18334:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                                  "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                                }
                                              },
                                              "id": 2311,
                                              "indexExpression": {
                                                "id": 2310,
                                                "name": "nextTokenId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2292,
                                                "src": "18346:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "18334:24:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                                "typeString": "struct ERC721A.TokenOwnership storage ref"
                                              }
                                            },
                                            "id": 2312,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "addr",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1209,
                                            "src": "18334:29:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "expression": {
                                              "id": 2313,
                                              "name": "prevOwnership",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2223,
                                              "src": "18366:13:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                "typeString": "struct ERC721A.TokenOwnership memory"
                                              }
                                            },
                                            "id": 2314,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "addr",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1209,
                                            "src": "18366:18:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          },
                                          "src": "18334:50:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "id": 2316,
                                        "nodeType": "ExpressionStatement",
                                        "src": "18334:50:13"
                                      },
                                      {
                                        "expression": {
                                          "id": 2323,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "expression": {
                                              "baseExpression": {
                                                "id": 2317,
                                                "name": "_ownerships",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1236,
                                                "src": "18406:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_TokenOwnership_$1214_storage_$",
                                                  "typeString": "mapping(uint256 => struct ERC721A.TokenOwnership storage ref)"
                                                }
                                              },
                                              "id": 2319,
                                              "indexExpression": {
                                                "id": 2318,
                                                "name": "nextTokenId",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2292,
                                                "src": "18418:11:13",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "18406:24:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_storage",
                                                "typeString": "struct ERC721A.TokenOwnership storage ref"
                                              }
                                            },
                                            "id": 2320,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "memberName": "startTimestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1211,
                                            "src": "18406:39:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "expression": {
                                              "id": 2321,
                                              "name": "prevOwnership",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2223,
                                              "src": "18448:13:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                                "typeString": "struct ERC721A.TokenOwnership memory"
                                              }
                                            },
                                            "id": 2322,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "startTimestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1211,
                                            "src": "18448:28:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "src": "18406:70:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint64",
                                            "typeString": "uint64"
                                          }
                                        },
                                        "id": 2324,
                                        "nodeType": "ExpressionStatement",
                                        "src": "18406:70:13"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2331,
                                "name": "prevOwnership",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2223,
                                "src": "18543:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                }
                              },
                              "id": 2332,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1209,
                              "src": "18543:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2335,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18571:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2334,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18563:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2333,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18563:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2336,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18563:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2337,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2218,
                              "src": "18575:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2330,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 119,
                            "src": "18534:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 2338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18534:49:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2339,
                        "nodeType": "EmitStatement",
                        "src": "18529:54:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 2341,
                                "name": "prevOwnership",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2223,
                                "src": "18614:13:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_TokenOwnership_$1214_memory_ptr",
                                  "typeString": "struct ERC721A.TokenOwnership memory"
                                }
                              },
                              "id": 2342,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1209,
                              "src": "18614:18:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 2345,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "18642:1:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 2344,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18634:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 2343,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18634:7:13",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 2346,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18634:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2347,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2218,
                              "src": "18646:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 2348,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18655:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 2340,
                            "name": "_afterTokenTransfers",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2460,
                            "src": "18593:20:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 2349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18593:64:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2350,
                        "nodeType": "ExpressionStatement",
                        "src": "18593:64:13"
                      },
                      {
                        "id": 2354,
                        "nodeType": "UncheckedBlock",
                        "src": "18756:49:13",
                        "statements": [
                          {
                            "expression": {
                              "id": 2352,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "18780:14:13",
                              "subExpression": {
                                "id": 2351,
                                "name": "_burnCounter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1227,
                                "src": "18780:12:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2353,
                            "nodeType": "ExpressionStatement",
                            "src": "18780:14:13"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2216,
                    "nodeType": "StructuredDocumentation",
                    "src": "16601:206:13",
                    "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
                  },
                  "id": 2356,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "16821:5:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2218,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "16835:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2356,
                        "src": "16827:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16827:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16826:17:13"
                  },
                  "returnParameters": {
                    "id": 2220,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16861:0:13"
                  },
                  "scope": 2461,
                  "src": "16812:1999:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2378,
                    "nodeType": "Block",
                    "src": "19022:89:13",
                    "statements": [
                      {
                        "expression": {
                          "id": 2370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 2366,
                              "name": "_tokenApprovals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1245,
                              "src": "19032:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 2368,
                            "indexExpression": {
                              "id": 2367,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2361,
                              "src": "19048:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "19032:24:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2369,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2359,
                            "src": "19059:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "19032:29:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2371,
                        "nodeType": "ExpressionStatement",
                        "src": "19032:29:13"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2373,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "19085:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2374,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2359,
                              "src": "19092:2:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2375,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2361,
                              "src": "19096:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2372,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 128,
                            "src": "19076:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 2376,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19076:28:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2377,
                        "nodeType": "EmitStatement",
                        "src": "19071:33:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2357,
                    "nodeType": "StructuredDocumentation",
                    "src": "18817:100:13",
                    "text": " @dev Approve `to` to operate on `tokenId`\n Emits a {Approval} event."
                  },
                  "id": 2379,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nameLocation": "18931:8:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2359,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "18957:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2379,
                        "src": "18949:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2358,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18949:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2361,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "18977:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2379,
                        "src": "18969:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2360,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18969:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2363,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "19002:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2379,
                        "src": "18994:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2362,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18994:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18939:74:13"
                  },
                  "returnParameters": {
                    "id": 2365,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19022:0:13"
                  },
                  "scope": 2461,
                  "src": "18922:189:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2433,
                    "nodeType": "Block",
                    "src": "19756:486:13",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 2414,
                              "nodeType": "Block",
                              "src": "19867:87:13",
                              "statements": [
                                {
                                  "expression": {
                                    "commonType": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    "id": 2412,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2406,
                                      "name": "retval",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2404,
                                      "src": "19888:6:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "expression": {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "id": 2408,
                                              "name": "to",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2384,
                                              "src": "19914:2:13",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            ],
                                            "id": 2407,
                                            "name": "IERC721Receiver",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 238,
                                            "src": "19898:15:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$238_$",
                                              "typeString": "type(contract IERC721Receiver)"
                                            }
                                          },
                                          "id": 2409,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "19898:19:13",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC721Receiver_$238",
                                            "typeString": "contract IERC721Receiver"
                                          }
                                        },
                                        "id": 2410,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "onERC721Received",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 237,
                                        "src": "19898:36:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                          "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                        }
                                      },
                                      "id": 2411,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "selector",
                                      "nodeType": "MemberAccess",
                                      "src": "19898:45:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    },
                                    "src": "19888:55:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "functionReturnParameters": 2392,
                                  "id": 2413,
                                  "nodeType": "Return",
                                  "src": "19881:62:13"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 2415,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 2405,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 2404,
                                  "mutability": "mutable",
                                  "name": "retval",
                                  "nameLocation": "19859:6:13",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2415,
                                  "src": "19852:13:13",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "typeName": {
                                    "id": 2403,
                                    "name": "bytes4",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19852:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "19851:15:13"
                            },
                            "src": "19843:111:13"
                          },
                          {
                            "block": {
                              "id": 2430,
                              "nodeType": "Block",
                              "src": "19983:253:13",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2422,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "id": 2419,
                                        "name": "reason",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2417,
                                        "src": "20001:6:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      "id": 2420,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "src": "20001:13:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 2421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "20018:1:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "20001:18:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "falseBody": {
                                    "id": 2428,
                                    "nodeType": "Block",
                                    "src": "20107:119:13",
                                    "statements": [
                                      {
                                        "AST": {
                                          "nodeType": "YulBlock",
                                          "src": "20134:78:13",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "20167:2:13",
                                                        "type": "",
                                                        "value": "32"
                                                      },
                                                      {
                                                        "name": "reason",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "20171:6:13"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "20163:3:13"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "20163:15:13"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "reason",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "20186:6:13"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "20180:5:13"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "20180:13:13"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "revert",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "20156:6:13"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "20156:38:13"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "20156:38:13"
                                            }
                                          ]
                                        },
                                        "evmVersion": "istanbul",
                                        "externalReferences": [
                                          {
                                            "declaration": 2417,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "20171:6:13",
                                            "valueSize": 1
                                          },
                                          {
                                            "declaration": 2417,
                                            "isOffset": false,
                                            "isSlot": false,
                                            "src": "20186:6:13",
                                            "valueSize": 1
                                          }
                                        ],
                                        "id": 2427,
                                        "nodeType": "InlineAssembly",
                                        "src": "20125:87:13"
                                      }
                                    ]
                                  },
                                  "id": 2429,
                                  "nodeType": "IfStatement",
                                  "src": "19997:229:13",
                                  "trueBody": {
                                    "id": 2426,
                                    "nodeType": "Block",
                                    "src": "20021:80:13",
                                    "statements": [
                                      {
                                        "errorCall": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "id": 2423,
                                            "name": "TransferToNonERC721ReceiverImplementer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1188,
                                            "src": "20046:38:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 2424,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "20046:40:13",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 2425,
                                        "nodeType": "RevertStatement",
                                        "src": "20039:47:13"
                                      }
                                    ]
                                  }
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 2431,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 2418,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 2417,
                                  "mutability": "mutable",
                                  "name": "reason",
                                  "nameLocation": "19975:6:13",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2431,
                                  "src": "19962:19:13",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes"
                                  },
                                  "typeName": {
                                    "id": 2416,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19962:5:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "19961:21:13"
                            },
                            "src": "19955:281:13"
                          }
                        ],
                        "externalCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2397,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 603,
                                "src": "19807:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19807:12:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2399,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2382,
                              "src": "19821:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2400,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2386,
                              "src": "19827:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 2401,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2388,
                              "src": "19836:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2394,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2384,
                                  "src": "19786:2:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2393,
                                "name": "IERC721Receiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 238,
                                "src": "19770:15:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$238_$",
                                  "typeString": "type(contract IERC721Receiver)"
                                }
                              },
                              "id": 2395,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "19770:19:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721Receiver_$238",
                                "typeString": "contract IERC721Receiver"
                              }
                            },
                            "id": 2396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "onERC721Received",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 237,
                            "src": "19770:36:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                            }
                          },
                          "id": 2402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19770:72:13",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 2432,
                        "nodeType": "TryStatement",
                        "src": "19766:470:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2380,
                    "nodeType": "StructuredDocumentation",
                    "src": "19117:470:13",
                    "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
                  },
                  "id": 2434,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkContractOnERC721Received",
                  "nameLocation": "19601:30:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2389,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2382,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "19649:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2434,
                        "src": "19641:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2381,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19641:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2384,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "19671:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2434,
                        "src": "19663:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2383,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "19663:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2386,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "19691:7:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2434,
                        "src": "19683:15:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19683:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2388,
                        "mutability": "mutable",
                        "name": "_data",
                        "nameLocation": "19721:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2434,
                        "src": "19708:18:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2387,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19708:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19631:101:13"
                  },
                  "returnParameters": {
                    "id": 2392,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2391,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2434,
                        "src": "19750:4:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2390,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19750:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19749:6:13"
                  },
                  "scope": 2461,
                  "src": "19592:650:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2446,
                    "nodeType": "Block",
                    "src": "21025:2:13",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2435,
                    "nodeType": "StructuredDocumentation",
                    "src": "20248:620:13",
                    "text": " @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.\n And also called before burning one token.\n startTokenId - the first token id to be transferred\n quantity - the amount to be transferred\n Calling conditions:\n - When `from` and `to` are both non-zero, `from`'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, `tokenId` will be burned by `from`.\n - `from` and `to` are never both zero."
                  },
                  "id": 2447,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfers",
                  "nameLocation": "20882:21:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2437,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "20921:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2447,
                        "src": "20913:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2436,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20913:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2439,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "20943:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2447,
                        "src": "20935:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2438,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20935:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2441,
                        "mutability": "mutable",
                        "name": "startTokenId",
                        "nameLocation": "20963:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2447,
                        "src": "20955:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2440,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20955:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2443,
                        "mutability": "mutable",
                        "name": "quantity",
                        "nameLocation": "20993:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2447,
                        "src": "20985:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2442,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20985:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20903:104:13"
                  },
                  "returnParameters": {
                    "id": 2445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21025:0:13"
                  },
                  "scope": 2461,
                  "src": "20873:154:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2459,
                    "nodeType": "Block",
                    "src": "21819:2:13",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2448,
                    "nodeType": "StructuredDocumentation",
                    "src": "21033:630:13",
                    "text": " @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes\n minting.\n And also called after one token has been burned.\n startTokenId - the first token id to be transferred\n quantity - the amount to be transferred\n Calling conditions:\n - When `from` and `to` are both non-zero, `from`'s `tokenId` has been\n transferred to `to`.\n - When `from` is zero, `tokenId` has been minted for `to`.\n - When `to` is zero, `tokenId` has been burned by `from`.\n - `from` and `to` are never both zero."
                  },
                  "id": 2460,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_afterTokenTransfers",
                  "nameLocation": "21677:20:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2457,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2450,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "21715:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2460,
                        "src": "21707:12:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2449,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21707:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2452,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "21737:2:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2460,
                        "src": "21729:10:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21729:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2454,
                        "mutability": "mutable",
                        "name": "startTokenId",
                        "nameLocation": "21757:12:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2460,
                        "src": "21749:20:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2453,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21749:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2456,
                        "mutability": "mutable",
                        "name": "quantity",
                        "nameLocation": "21787:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2460,
                        "src": "21779:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2455,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21779:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21697:104:13"
                  },
                  "returnParameters": {
                    "id": 2458,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21819:0:13"
                  },
                  "scope": 2461,
                  "src": "21668:153:13",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2462,
              "src": "1708:20115:13",
              "usedErrors": [
                1158,
                1160,
                1162,
                1164,
                1166,
                1180,
                1184,
                1186,
                1188,
                1190,
                1192
              ]
            }
          ],
          "src": "56:21768:13"
        },
        "id": 13
      }
    }
  }
}
