{
  "contractName": "IERC721Upgradeable",
  "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": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "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": "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "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": "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"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 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-upgradeable/token/ERC721/IERC721Upgradeable.sol\":\"IERC721Upgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x016298e66a5810253c6c905e61966bb31c8775c3f3517bf946ff56ee31d6c005\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1723de5ae414f210db039b19e6487c19c2d643483c9be7c445cf481a80c199d2\",\"dweb:/ipfs/QmcBLbmPdZsNngYhA1KDadNUqQZoGACytFWuUH74RC4AXC\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758\",\"dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\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`.\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    /**\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 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 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 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 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",
  "sourcePath": "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
  "ast": {
    "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
    "exportedSymbols": {
      "IERC165Upgradeable": [
        16750
      ],
      "IERC721Upgradeable": [
        16156
      ]
    },
    "id": 16157,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16042,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "108:23:56"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol",
        "file": "../../utils/introspection/IERC165Upgradeable.sol",
        "id": 16043,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16157,
        "sourceUnit": 16751,
        "src": "133:58:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16045,
              "name": "IERC165Upgradeable",
              "nameLocations": [
                "293:18:56"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16750,
              "src": "293:18:56"
            },
            "id": 16046,
            "nodeType": "InheritanceSpecifier",
            "src": "293:18:56"
          }
        ],
        "canonicalName": "IERC721Upgradeable",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 16044,
          "nodeType": "StructuredDocumentation",
          "src": "193:67:56",
          "text": " @dev Required interface of an ERC721 compliant contract."
        },
        "fullyImplemented": false,
        "id": 16156,
        "linearizedBaseContracts": [
          16156,
          16750
        ],
        "name": "IERC721Upgradeable",
        "nameLocation": "271:18:56",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 16047,
              "nodeType": "StructuredDocumentation",
              "src": "318:88:56",
              "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
            },
            "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "id": 16055,
            "name": "Transfer",
            "nameLocation": "417:8:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "442:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "426:20:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "426:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16051,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "464:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "448:18:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16050,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "448:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16053,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "484:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "468:23:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "425:67:56"
            },
            "src": "411:82:56"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16056,
              "nodeType": "StructuredDocumentation",
              "src": "499:94:56",
              "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
            },
            "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
            "id": 16064,
            "name": "Approval",
            "nameLocation": "604:8:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16058,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "629:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "613:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "613:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16060,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "approved",
                  "nameLocation": "652:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "636:24:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16062,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "678:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "662:23:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16061,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "662:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "612:74:56"
            },
            "src": "598:89:56"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16065,
              "nodeType": "StructuredDocumentation",
              "src": "693:117:56",
              "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
            },
            "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
            "id": 16073,
            "name": "ApprovalForAll",
            "nameLocation": "821:14:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16067,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "852:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "836:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "836:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16069,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "875:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "859:24:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "859:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16071,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "approved",
                  "nameLocation": "890:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "885:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16070,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "885:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "835:64:56"
            },
            "src": "815:85:56"
          },
          {
            "documentation": {
              "id": 16074,
              "nodeType": "StructuredDocumentation",
              "src": "906:76:56",
              "text": " @dev Returns the number of tokens in ``owner``'s account."
            },
            "functionSelector": "70a08231",
            "id": 16081,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "996:9:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16076,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1014:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16081,
                  "src": "1006:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16075,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1005:15:56"
            },
            "returnParameters": {
              "id": 16080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16079,
                  "mutability": "mutable",
                  "name": "balance",
                  "nameLocation": "1052:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16081,
                  "src": "1044:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1044:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1043:17:56"
            },
            "scope": 16156,
            "src": "987:74:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16082,
              "nodeType": "StructuredDocumentation",
              "src": "1067:131:56",
              "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
            },
            "functionSelector": "6352211e",
            "id": 16089,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "nameLocation": "1212:7:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16084,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1228:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16089,
                  "src": "1220:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1219:17:56"
            },
            "returnParameters": {
              "id": 16088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16087,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1268:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16089,
                  "src": "1260:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1260:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1259:15:56"
            },
            "scope": 16156,
            "src": "1203:72:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16090,
              "nodeType": "StructuredDocumentation",
              "src": "1281:556:56",
              "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": 16101,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nameLocation": "1851:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16099,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16092,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "1885:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1877:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16091,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16094,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "1907:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1899:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16093,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1899:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16096,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1927:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1919:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1919:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16098,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "1959:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1944:19:56",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16097,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1944:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1867:102:56"
            },
            "returnParameters": {
              "id": 16100,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1978:0:56"
            },
            "scope": 16156,
            "src": "1842:137:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16102,
              "nodeType": "StructuredDocumentation",
              "src": "1985:687:56",
              "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 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": 16111,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nameLocation": "2686:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16104,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2720:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2712:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2712:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16106,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2742:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2734:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2734:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16108,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "2762:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2754:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16107,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2754:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2702:73:56"
            },
            "returnParameters": {
              "id": 16110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2784:0:56"
            },
            "scope": 16156,
            "src": "2677:108:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16112,
              "nodeType": "StructuredDocumentation",
              "src": "2791:504:56",
              "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": 16121,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "3309:12:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16114,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "3339:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3331:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3331:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16116,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3361:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3353:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3353:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16118,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3381:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3373:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16117,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3373:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3321:73:56"
            },
            "returnParameters": {
              "id": 16120,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3403:0:56"
            },
            "scope": 16156,
            "src": "3300:104:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16122,
              "nodeType": "StructuredDocumentation",
              "src": "3410:452:56",
              "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": 16129,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "3876:7:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16127,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16124,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3892:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16129,
                  "src": "3884:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16123,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3884:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16126,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3904:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16129,
                  "src": "3896:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16125,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3896:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3883:29:56"
            },
            "returnParameters": {
              "id": 16128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3921:0:56"
            },
            "scope": 16156,
            "src": "3867:55:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16130,
              "nodeType": "StructuredDocumentation",
              "src": "3928:309:56",
              "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": 16137,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nameLocation": "4251:17:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16132,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4277:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16137,
                  "src": "4269:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16131,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4269:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16134,
                  "mutability": "mutable",
                  "name": "_approved",
                  "nameLocation": "4292:9:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16137,
                  "src": "4287:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16133,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4287:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4268:34:56"
            },
            "returnParameters": {
              "id": 16136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4311:0:56"
            },
            "scope": 16156,
            "src": "4242:70:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16138,
              "nodeType": "StructuredDocumentation",
              "src": "4318:139:56",
              "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
            },
            "functionSelector": "081812fc",
            "id": 16145,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "nameLocation": "4471:11:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16140,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "4491:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16145,
                  "src": "4483:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16139,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4483:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4482:17:56"
            },
            "returnParameters": {
              "id": 16144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16143,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4531:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16145,
                  "src": "4523:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4523:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4522:18:56"
            },
            "scope": 16156,
            "src": "4462:79:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16146,
              "nodeType": "StructuredDocumentation",
              "src": "4547:138:56",
              "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
            },
            "functionSelector": "e985e9c5",
            "id": 16155,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nameLocation": "4699:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16148,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4724:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4716:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16147,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4716:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16150,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4739:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4731:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16149,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4731:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4715:33:56"
            },
            "returnParameters": {
              "id": 16154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16153,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4772:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16152,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4771:6:56"
            },
            "scope": 16156,
            "src": "4690:88:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16157,
        "src": "261:4519:56",
        "usedErrors": []
      }
    ],
    "src": "108:4673:56"
  },
  "legacyAST": {
    "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol",
    "exportedSymbols": {
      "IERC165Upgradeable": [
        16750
      ],
      "IERC721Upgradeable": [
        16156
      ]
    },
    "id": 16157,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16042,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "108:23:56"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol",
        "file": "../../utils/introspection/IERC165Upgradeable.sol",
        "id": 16043,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16157,
        "sourceUnit": 16751,
        "src": "133:58:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16045,
              "name": "IERC165Upgradeable",
              "nameLocations": [
                "293:18:56"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16750,
              "src": "293:18:56"
            },
            "id": 16046,
            "nodeType": "InheritanceSpecifier",
            "src": "293:18:56"
          }
        ],
        "canonicalName": "IERC721Upgradeable",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 16044,
          "nodeType": "StructuredDocumentation",
          "src": "193:67:56",
          "text": " @dev Required interface of an ERC721 compliant contract."
        },
        "fullyImplemented": false,
        "id": 16156,
        "linearizedBaseContracts": [
          16156,
          16750
        ],
        "name": "IERC721Upgradeable",
        "nameLocation": "271:18:56",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 16047,
              "nodeType": "StructuredDocumentation",
              "src": "318:88:56",
              "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`."
            },
            "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "id": 16055,
            "name": "Transfer",
            "nameLocation": "417:8:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "442:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "426:20:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "426:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16051,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "464:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "448:18:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16050,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "448:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16053,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "484:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16055,
                  "src": "468:23:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "425:67:56"
            },
            "src": "411:82:56"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16056,
              "nodeType": "StructuredDocumentation",
              "src": "499:94:56",
              "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token."
            },
            "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
            "id": 16064,
            "name": "Approval",
            "nameLocation": "604:8:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16058,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "629:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "613:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "613:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16060,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "approved",
                  "nameLocation": "652:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "636:24:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "636:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16062,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "678:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16064,
                  "src": "662:23:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16061,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "662:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "612:74:56"
            },
            "src": "598:89:56"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 16065,
              "nodeType": "StructuredDocumentation",
              "src": "693:117:56",
              "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
            },
            "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
            "id": 16073,
            "name": "ApprovalForAll",
            "nameLocation": "821:14:56",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16072,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16067,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "852:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "836:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "836:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16069,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "875:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "859:24:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16068,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "859:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16071,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "approved",
                  "nameLocation": "890:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16073,
                  "src": "885:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16070,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "885:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "835:64:56"
            },
            "src": "815:85:56"
          },
          {
            "documentation": {
              "id": 16074,
              "nodeType": "StructuredDocumentation",
              "src": "906:76:56",
              "text": " @dev Returns the number of tokens in ``owner``'s account."
            },
            "functionSelector": "70a08231",
            "id": 16081,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "996:9:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16076,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1014:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16081,
                  "src": "1006:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16075,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1006:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1005:15:56"
            },
            "returnParameters": {
              "id": 16080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16079,
                  "mutability": "mutable",
                  "name": "balance",
                  "nameLocation": "1052:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16081,
                  "src": "1044:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1044:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1043:17:56"
            },
            "scope": 16156,
            "src": "987:74:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16082,
              "nodeType": "StructuredDocumentation",
              "src": "1067:131:56",
              "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist."
            },
            "functionSelector": "6352211e",
            "id": 16089,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "nameLocation": "1212:7:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16085,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16084,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1228:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16089,
                  "src": "1220:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1219:17:56"
            },
            "returnParameters": {
              "id": 16088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16087,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1268:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16089,
                  "src": "1260:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16086,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1260:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1259:15:56"
            },
            "scope": 16156,
            "src": "1203:72:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16090,
              "nodeType": "StructuredDocumentation",
              "src": "1281:556:56",
              "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": 16101,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nameLocation": "1851:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16099,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16092,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "1885:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1877:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16091,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16094,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "1907:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1899:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16093,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1899:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16096,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1927:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1919:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1919:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16098,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "1959:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16101,
                  "src": "1944:19:56",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16097,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1944:5:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1867:102:56"
            },
            "returnParameters": {
              "id": 16100,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1978:0:56"
            },
            "scope": 16156,
            "src": "1842:137:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16102,
              "nodeType": "StructuredDocumentation",
              "src": "1985:687:56",
              "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 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": 16111,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nameLocation": "2686:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16104,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2720:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2712:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16103,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2712:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16106,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2742:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2734:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16105,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2734:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16108,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "2762:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16111,
                  "src": "2754:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16107,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2754:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2702:73:56"
            },
            "returnParameters": {
              "id": 16110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2784:0:56"
            },
            "scope": 16156,
            "src": "2677:108:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16112,
              "nodeType": "StructuredDocumentation",
              "src": "2791:504:56",
              "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": 16121,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "3309:12:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16119,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16114,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "3339:4:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3331:12:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16113,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3331:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16116,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3361:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3353:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16115,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3353:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16118,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3381:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16121,
                  "src": "3373:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16117,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3373:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3321:73:56"
            },
            "returnParameters": {
              "id": 16120,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3403:0:56"
            },
            "scope": 16156,
            "src": "3300:104:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16122,
              "nodeType": "StructuredDocumentation",
              "src": "3410:452:56",
              "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": 16129,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "3876:7:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16127,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16124,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3892:2:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16129,
                  "src": "3884:10:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16123,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3884:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16126,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3904:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16129,
                  "src": "3896:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16125,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3896:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3883:29:56"
            },
            "returnParameters": {
              "id": 16128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3921:0:56"
            },
            "scope": 16156,
            "src": "3867:55:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16130,
              "nodeType": "StructuredDocumentation",
              "src": "3928:309:56",
              "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": 16137,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nameLocation": "4251:17:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16132,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4277:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16137,
                  "src": "4269:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16131,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4269:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16134,
                  "mutability": "mutable",
                  "name": "_approved",
                  "nameLocation": "4292:9:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16137,
                  "src": "4287:14:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16133,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4287:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4268:34:56"
            },
            "returnParameters": {
              "id": 16136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4311:0:56"
            },
            "scope": 16156,
            "src": "4242:70:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16138,
              "nodeType": "StructuredDocumentation",
              "src": "4318:139:56",
              "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist."
            },
            "functionSelector": "081812fc",
            "id": 16145,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "nameLocation": "4471:11:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16141,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16140,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "4491:7:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16145,
                  "src": "4483:15:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16139,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4483:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4482:17:56"
            },
            "returnParameters": {
              "id": 16144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16143,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4531:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16145,
                  "src": "4523:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16142,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4523:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4522:18:56"
            },
            "scope": 16156,
            "src": "4462:79:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 16146,
              "nodeType": "StructuredDocumentation",
              "src": "4547:138:56",
              "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}"
            },
            "functionSelector": "e985e9c5",
            "id": 16155,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nameLocation": "4699:16:56",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16148,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4724:5:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4716:13:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16147,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4716:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16150,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "4739:8:56",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4731:16:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16149,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4731:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4715:33:56"
            },
            "returnParameters": {
              "id": 16154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16153,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16155,
                  "src": "4772:4:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 16152,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4771:6:56"
            },
            "scope": 16156,
            "src": "4690:88:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16157,
        "src": "261:4519:56",
        "usedErrors": []
      }
    ],
    "src": "108:4673:56"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.4",
  "updatedAt": "2023-02-10T04:50:49.667Z",
  "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 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
  }
}