UNPKG

@tokamak-network/thanos-contracts

Version:
1 lines 52.1 kB
{"abi":[{"type":"function","name":"onERC721Received","inputs":[{"name":"_operator","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"onERC721Received(address,address,uint256,bytes)":"150b7a02"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note: the ERC-165 identifier for this interface is 0x150b7a02.\",\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"The ERC721 smart contract calls this function on the recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return of other than the magic value MUST result in the transaction being reverted. Note: the contract address is always the message sender.\",\"params\":{\"_data\":\"Additional data with no specified format\",\"_from\":\"The address which previously owned the token\",\"_operator\":\"The address which called `safeTransferFrom` function\",\"_tokenId\":\"The NFT identifier which is being transferred\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC721Received(address,address,uint256,bytes)\\\"))` unless throwing\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Handle the receipt of an NFT\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/interfaces/IERC721.sol\":\"IERC721TokenReceiver\"},\"evmVersion\":\"shanghai\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"lib/forge-std/src/interfaces/IERC721.sol\":{\"keccak256\":\"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f\",\"dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"onERC721Received(address,address,uint256,bytes)":{"details":"The ERC721 smart contract calls this function on the recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return of other than the magic value MUST result in the transaction being reverted. Note: the contract address is always the message sender.","params":{"_data":"Additional data with no specified format","_from":"The address which previously owned the token","_operator":"The address which called `safeTransferFrom` function","_tokenId":"The NFT identifier which is being transferred"},"returns":{"_0":"`bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))` unless throwing"}}},"version":1},"userdoc":{"kind":"user","methods":{"onERC721Received(address,address,uint256,bytes)":{"notice":"Handle the receipt of an NFT"}},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"lib/forge-std/src/interfaces/IERC721.sol":"IERC721TokenReceiver"},"evmVersion":"shanghai","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"lib/forge-std/src/interfaces/IERC165.sol":{"keccak256":"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600","urls":["bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc","dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT"],"license":"MIT"},"lib/forge-std/src/interfaces/IERC721.sol":{"keccak256":"0xf069262a264fdb69f8f37a10d2df7374649e9ba73f8414c9c8a3b51184625f15","urls":["bzz-raw://924a41ca82a68ffbd503a5faf2f76d13e9938f10501a71094716f12bb64b4b7f","dweb:/ipfs/QmdWnqfKc5ZGhmxNPTde4zrFchnv9Yk9MpCMb2rdhXE5gm"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user","methods":{"onERC721Received(address,address,uint256,bytes)":{"notice":"Handle the receipt of an NFT"}}},"devdoc":{"version":1,"kind":"dev","details":"Note: the ERC-165 identifier for this interface is 0x150b7a02.","methods":{"onERC721Received(address,address,uint256,bytes)":{"details":"The ERC721 smart contract calls this function on the recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return of other than the magic value MUST result in the transaction being reverted. Note: the contract address is always the message sender.","params":{"_data":"Additional data with no specified format","_from":"The address which previously owned the token","_operator":"The address which called `safeTransferFrom` function","_tokenId":"The NFT identifier which is being transferred"},"returns":{"_0":"`bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))` unless throwing"}}}},"ast":{"absolutePath":"lib/forge-std/src/interfaces/IERC721.sol","id":32299,"exportedSymbols":{"IERC165":[32018],"IERC721":[32230],"IERC721Enumerable":[32298],"IERC721Metadata":[32270],"IERC721TokenReceiver":[32246]},"nodeType":"SourceUnit","src":"32:8994:18","nodes":[{"id":32116,"nodeType":"PragmaDirective","src":"32:24:18","nodes":[],"literals":["solidity",">=","0.6",".2"]},{"id":32117,"nodeType":"ImportDirective","src":"58:23:18","nodes":[],"absolutePath":"lib/forge-std/src/interfaces/IERC165.sol","file":"./IERC165.sol","nameLocation":"-1:-1:-1","scope":32299,"sourceUnit":32019,"symbolAliases":[],"unitAlias":""},{"id":32230,"nodeType":"ContractDefinition","src":"249:5535:18","nodes":[{"id":32129,"nodeType":"EventDefinition","src":"673:85:18","nodes":[],"anonymous":false,"documentation":{"id":32121,"nodeType":"StructuredDocumentation","src":"284:384:18","text":"@dev This emits when ownership of any NFT changes by any mechanism.\n This event emits when NFTs are created (`from` == 0) and destroyed\n (`to` == 0). Exception: during contract creation, any number of NFTs\n may be created and assigned without emitting Transfer. At the time of\n any transfer, the approved address for that NFT (if any) is reset to none."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","name":"Transfer","nameLocation":"679:8:18","parameters":{"id":32128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32123,"indexed":true,"mutability":"mutable","name":"_from","nameLocation":"704:5:18","nodeType":"VariableDeclaration","scope":32129,"src":"688:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32122,"name":"address","nodeType":"ElementaryTypeName","src":"688:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32125,"indexed":true,"mutability":"mutable","name":"_to","nameLocation":"727:3:18","nodeType":"VariableDeclaration","scope":32129,"src":"711:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32124,"name":"address","nodeType":"ElementaryTypeName","src":"711:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32127,"indexed":true,"mutability":"mutable","name":"_tokenId","nameLocation":"748:8:18","nodeType":"VariableDeclaration","scope":32129,"src":"732:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32126,"name":"uint256","nodeType":"ElementaryTypeName","src":"732:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"687:70:18"}},{"id":32138,"nodeType":"EventDefinition","src":"1047:92:18","nodes":[],"anonymous":false,"documentation":{"id":32130,"nodeType":"StructuredDocumentation","src":"764:278:18","text":"@dev This emits when the approved address for an NFT is changed or\n reaffirmed. The zero address indicates there is no approved address.\n When a Transfer event emits, this also indicates that the approved\n address for that NFT (if any) is reset to none."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","name":"Approval","nameLocation":"1053:8:18","parameters":{"id":32137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32132,"indexed":true,"mutability":"mutable","name":"_owner","nameLocation":"1078:6:18","nodeType":"VariableDeclaration","scope":32138,"src":"1062:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32131,"name":"address","nodeType":"ElementaryTypeName","src":"1062:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32134,"indexed":true,"mutability":"mutable","name":"_approved","nameLocation":"1102:9:18","nodeType":"VariableDeclaration","scope":32138,"src":"1086:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32133,"name":"address","nodeType":"ElementaryTypeName","src":"1086:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32136,"indexed":true,"mutability":"mutable","name":"_tokenId","nameLocation":"1129:8:18","nodeType":"VariableDeclaration","scope":32138,"src":"1113:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32135,"name":"uint256","nodeType":"ElementaryTypeName","src":"1113:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1061:77:18"}},{"id":32147,"nodeType":"EventDefinition","src":"1278:88:18","nodes":[],"anonymous":false,"documentation":{"id":32139,"nodeType":"StructuredDocumentation","src":"1145:128:18","text":"@dev This emits when an operator is enabled or disabled for an owner.\n The operator can manage all NFTs of the owner."},"eventSelector":"17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31","name":"ApprovalForAll","nameLocation":"1284:14:18","parameters":{"id":32146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32141,"indexed":true,"mutability":"mutable","name":"_owner","nameLocation":"1315:6:18","nodeType":"VariableDeclaration","scope":32147,"src":"1299:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32140,"name":"address","nodeType":"ElementaryTypeName","src":"1299:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32143,"indexed":true,"mutability":"mutable","name":"_operator","nameLocation":"1339:9:18","nodeType":"VariableDeclaration","scope":32147,"src":"1323:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32142,"name":"address","nodeType":"ElementaryTypeName","src":"1323:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32145,"indexed":false,"mutability":"mutable","name":"_approved","nameLocation":"1355:9:18","nodeType":"VariableDeclaration","scope":32147,"src":"1350:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32144,"name":"bool","nodeType":"ElementaryTypeName","src":"1350:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1298:67:18"}},{"id":32155,"nodeType":"FunctionDefinition","src":"1695:67:18","nodes":[],"documentation":{"id":32148,"nodeType":"StructuredDocumentation","src":"1372:318:18","text":"@notice Count all NFTs assigned to an owner\n @dev NFTs assigned to the zero address are considered invalid, and this\n function throws for queries about the zero address.\n @param _owner An address for whom to query the balance\n @return The number of NFTs owned by `_owner`, possibly zero"},"functionSelector":"70a08231","implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"1704:9:18","parameters":{"id":32151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32150,"mutability":"mutable","name":"_owner","nameLocation":"1722:6:18","nodeType":"VariableDeclaration","scope":32155,"src":"1714:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32149,"name":"address","nodeType":"ElementaryTypeName","src":"1714:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1713:16:18"},"returnParameters":{"id":32154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32153,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32155,"src":"1753:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32152,"name":"uint256","nodeType":"ElementaryTypeName","src":"1753:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1752:9:18"},"scope":32230,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32163,"nodeType":"FunctionDefinition","src":"2019:67:18","nodes":[],"documentation":{"id":32156,"nodeType":"StructuredDocumentation","src":"1768:246:18","text":"@notice Find the owner of an NFT\n @dev NFTs assigned to zero address are considered invalid, and queries\n about them do throw.\n @param _tokenId The identifier for an NFT\n @return The address of the owner of the NFT"},"functionSelector":"6352211e","implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"2028:7:18","parameters":{"id":32159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32158,"mutability":"mutable","name":"_tokenId","nameLocation":"2044:8:18","nodeType":"VariableDeclaration","scope":32163,"src":"2036:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32157,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:18:18"},"returnParameters":{"id":32162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32163,"src":"2077:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32160,"name":"address","nodeType":"ElementaryTypeName","src":"2077:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2076:9:18"},"scope":32230,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32175,"nodeType":"FunctionDefinition","src":"2931:110:18","nodes":[],"documentation":{"id":32164,"nodeType":"StructuredDocumentation","src":"2092:834:18","text":"@notice Transfers the ownership of an NFT from one address to another address\n @dev Throws unless `msg.sender` is the current owner, an authorized\n operator, or the approved address for this NFT. Throws if `_from` is\n not the current owner. Throws if `_to` is the zero address. Throws if\n `_tokenId` is not a valid NFT. When transfer is complete, this function\n checks if `_to` is a smart contract (code size > 0). If so, it calls\n `onERC721Received` on `_to` and throws if the return value is not\n `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`.\n @param _from The current owner of the NFT\n @param _to The new owner\n @param _tokenId The NFT to transfer\n @param data Additional data with no specified format, sent in call to `_to`"},"functionSelector":"b88d4fde","implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"2940:16:18","parameters":{"id":32173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32166,"mutability":"mutable","name":"_from","nameLocation":"2965:5:18","nodeType":"VariableDeclaration","scope":32175,"src":"2957:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32165,"name":"address","nodeType":"ElementaryTypeName","src":"2957:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32168,"mutability":"mutable","name":"_to","nameLocation":"2980:3:18","nodeType":"VariableDeclaration","scope":32175,"src":"2972:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32167,"name":"address","nodeType":"ElementaryTypeName","src":"2972:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32170,"mutability":"mutable","name":"_tokenId","nameLocation":"2993:8:18","nodeType":"VariableDeclaration","scope":32175,"src":"2985:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32169,"name":"uint256","nodeType":"ElementaryTypeName","src":"2985:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32172,"mutability":"mutable","name":"data","nameLocation":"3018:4:18","nodeType":"VariableDeclaration","scope":32175,"src":"3003:19:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":32171,"name":"bytes","nodeType":"ElementaryTypeName","src":"3003:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2956:67:18"},"returnParameters":{"id":32174,"nodeType":"ParameterList","parameters":[],"src":"3040:0:18"},"scope":32230,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":32185,"nodeType":"FunctionDefinition","src":"3399:89:18","nodes":[],"documentation":{"id":32176,"nodeType":"StructuredDocumentation","src":"3047:347:18","text":"@notice Transfers the ownership of an NFT from one address to another address\n @dev This works identically to the other function with an extra data parameter,\n except this function just sets data to \"\".\n @param _from The current owner of the NFT\n @param _to The new owner\n @param _tokenId The NFT to transfer"},"functionSelector":"42842e0e","implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"3408:16:18","parameters":{"id":32183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32178,"mutability":"mutable","name":"_from","nameLocation":"3433:5:18","nodeType":"VariableDeclaration","scope":32185,"src":"3425:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32177,"name":"address","nodeType":"ElementaryTypeName","src":"3425:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32180,"mutability":"mutable","name":"_to","nameLocation":"3448:3:18","nodeType":"VariableDeclaration","scope":32185,"src":"3440:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32179,"name":"address","nodeType":"ElementaryTypeName","src":"3440:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32182,"mutability":"mutable","name":"_tokenId","nameLocation":"3461:8:18","nodeType":"VariableDeclaration","scope":32185,"src":"3453:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32181,"name":"uint256","nodeType":"ElementaryTypeName","src":"3453:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3424:46:18"},"returnParameters":{"id":32184,"nodeType":"ParameterList","parameters":[],"src":"3487:0:18"},"scope":32230,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":32195,"nodeType":"FunctionDefinition","src":"4069:85:18","nodes":[],"documentation":{"id":32186,"nodeType":"StructuredDocumentation","src":"3494:570:18","text":"@notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE\n TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE\n THEY MAY BE PERMANENTLY LOST\n @dev Throws unless `msg.sender` is the current owner, an authorized\n operator, or the approved address for this NFT. Throws if `_from` is\n not the current owner. Throws if `_to` is the zero address. Throws if\n `_tokenId` is not a valid NFT.\n @param _from The current owner of the NFT\n @param _to The new owner\n @param _tokenId The NFT to transfer"},"functionSelector":"23b872dd","implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4078:12:18","parameters":{"id":32193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32188,"mutability":"mutable","name":"_from","nameLocation":"4099:5:18","nodeType":"VariableDeclaration","scope":32195,"src":"4091:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32187,"name":"address","nodeType":"ElementaryTypeName","src":"4091:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32190,"mutability":"mutable","name":"_to","nameLocation":"4114:3:18","nodeType":"VariableDeclaration","scope":32195,"src":"4106:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32189,"name":"address","nodeType":"ElementaryTypeName","src":"4106:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32192,"mutability":"mutable","name":"_tokenId","nameLocation":"4127:8:18","nodeType":"VariableDeclaration","scope":32195,"src":"4119:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32191,"name":"uint256","nodeType":"ElementaryTypeName","src":"4119:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4090:46:18"},"returnParameters":{"id":32194,"nodeType":"ParameterList","parameters":[],"src":"4153:0:18"},"scope":32230,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":32203,"nodeType":"FunctionDefinition","src":"4514:71:18","nodes":[],"documentation":{"id":32196,"nodeType":"StructuredDocumentation","src":"4160:349:18","text":"@notice Change or reaffirm the approved address for an NFT\n @dev The zero address indicates there is no approved address.\n Throws unless `msg.sender` is the current NFT owner, or an authorized\n operator of the current owner.\n @param _approved The new approved NFT controller\n @param _tokenId The NFT to approve"},"functionSelector":"095ea7b3","implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4523:7:18","parameters":{"id":32201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32198,"mutability":"mutable","name":"_approved","nameLocation":"4539:9:18","nodeType":"VariableDeclaration","scope":32203,"src":"4531:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32197,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32200,"mutability":"mutable","name":"_tokenId","nameLocation":"4558:8:18","nodeType":"VariableDeclaration","scope":32203,"src":"4550:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4550:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4530:37:18"},"returnParameters":{"id":32202,"nodeType":"ParameterList","parameters":[],"src":"4584:0:18"},"scope":32230,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":32211,"nodeType":"FunctionDefinition","src":"4978:71:18","nodes":[],"documentation":{"id":32204,"nodeType":"StructuredDocumentation","src":"4591:382:18","text":"@notice Enable or disable approval for a third party (\"operator\") to manage\n all of `msg.sender`'s assets\n @dev Emits the ApprovalForAll event. The contract MUST allow\n multiple operators per owner.\n @param _operator Address to add to the set of authorized operators\n @param _approved True if the operator is approved, false to revoke approval"},"functionSelector":"a22cb465","implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"4987:17:18","parameters":{"id":32209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32206,"mutability":"mutable","name":"_operator","nameLocation":"5013:9:18","nodeType":"VariableDeclaration","scope":32211,"src":"5005:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32205,"name":"address","nodeType":"ElementaryTypeName","src":"5005:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32208,"mutability":"mutable","name":"_approved","nameLocation":"5029:9:18","nodeType":"VariableDeclaration","scope":32211,"src":"5024:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32207,"name":"bool","nodeType":"ElementaryTypeName","src":"5024:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5004:35:18"},"returnParameters":{"id":32210,"nodeType":"ParameterList","parameters":[],"src":"5048:0:18"},"scope":32230,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":32219,"nodeType":"FunctionDefinition","src":"5320:71:18","nodes":[],"documentation":{"id":32212,"nodeType":"StructuredDocumentation","src":"5055:260:18","text":"@notice Get the approved address for a single NFT\n @dev Throws if `_tokenId` is not a valid NFT.\n @param _tokenId The NFT to find the approved address for\n @return The approved address for this NFT, or the zero address if there is none"},"functionSelector":"081812fc","implemented":false,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"5329:11:18","parameters":{"id":32215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32214,"mutability":"mutable","name":"_tokenId","nameLocation":"5349:8:18","nodeType":"VariableDeclaration","scope":32219,"src":"5341:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32213,"name":"uint256","nodeType":"ElementaryTypeName","src":"5341:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5340:18:18"},"returnParameters":{"id":32218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32217,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32219,"src":"5382:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32216,"name":"address","nodeType":"ElementaryTypeName","src":"5382:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5381:9:18"},"scope":32230,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32229,"nodeType":"FunctionDefinition","src":"5692:90:18","nodes":[],"documentation":{"id":32220,"nodeType":"StructuredDocumentation","src":"5397:290:18","text":"@notice Query if an address is an authorized operator for another address\n @param _owner The address that owns the NFTs\n @param _operator The address that acts on behalf of the owner\n @return True if `_operator` is an approved operator for `_owner`, false otherwise"},"functionSelector":"e985e9c5","implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"5701:16:18","parameters":{"id":32225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32222,"mutability":"mutable","name":"_owner","nameLocation":"5726:6:18","nodeType":"VariableDeclaration","scope":32229,"src":"5718:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32221,"name":"address","nodeType":"ElementaryTypeName","src":"5718:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32224,"mutability":"mutable","name":"_operator","nameLocation":"5742:9:18","nodeType":"VariableDeclaration","scope":32229,"src":"5734:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32223,"name":"address","nodeType":"ElementaryTypeName","src":"5734:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5717:35:18"},"returnParameters":{"id":32228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32229,"src":"5776:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32226,"name":"bool","nodeType":"ElementaryTypeName","src":"5776:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5775:6:18"},"scope":32230,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":32119,"name":"IERC165","nameLocations":["270:7:18"],"nodeType":"IdentifierPath","referencedDeclaration":32018,"src":"270:7:18"},"id":32120,"nodeType":"InheritanceSpecifier","src":"270:7:18"}],"canonicalName":"IERC721","contractDependencies":[],"contractKind":"interface","documentation":{"id":32118,"nodeType":"StructuredDocumentation","src":"83:166:18","text":"@title ERC-721 Non-Fungible Token Standard\n @dev See https://eips.ethereum.org/EIPS/eip-721\n Note: the ERC-165 identifier for this interface is 0x80ac58cd."},"fullyImplemented":false,"linearizedBaseContracts":[32230,32018],"name":"IERC721","nameLocation":"259:7:18","scope":32299,"usedErrors":[],"usedEvents":[32129,32138,32147]},{"id":32246,"nodeType":"ContractDefinition","src":"5858:942:18","nodes":[{"id":32245,"nodeType":"FunctionDefinition","src":"6656:142:18","nodes":[],"documentation":{"id":32232,"nodeType":"StructuredDocumentation","src":"5895:756:18","text":"@notice Handle the receipt of an NFT\n @dev The ERC721 smart contract calls this function on the recipient\n after a `transfer`. This function MAY throw to revert and reject the\n transfer. Return of other than the magic value MUST result in the\n transaction being reverted.\n Note: the contract address is always the message sender.\n @param _operator The address which called `safeTransferFrom` function\n @param _from The address which previously owned the token\n @param _tokenId The NFT identifier which is being transferred\n @param _data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n unless throwing"},"functionSelector":"150b7a02","implemented":false,"kind":"function","modifiers":[],"name":"onERC721Received","nameLocation":"6665:16:18","parameters":{"id":32241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32234,"mutability":"mutable","name":"_operator","nameLocation":"6690:9:18","nodeType":"VariableDeclaration","scope":32245,"src":"6682:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32233,"name":"address","nodeType":"ElementaryTypeName","src":"6682:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32236,"mutability":"mutable","name":"_from","nameLocation":"6709:5:18","nodeType":"VariableDeclaration","scope":32245,"src":"6701:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32235,"name":"address","nodeType":"ElementaryTypeName","src":"6701:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32238,"mutability":"mutable","name":"_tokenId","nameLocation":"6724:8:18","nodeType":"VariableDeclaration","scope":32245,"src":"6716:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32237,"name":"uint256","nodeType":"ElementaryTypeName","src":"6716:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32240,"mutability":"mutable","name":"_data","nameLocation":"6749:5:18","nodeType":"VariableDeclaration","scope":32245,"src":"6734:20:18","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":32239,"name":"bytes","nodeType":"ElementaryTypeName","src":"6734:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6681:74:18"},"returnParameters":{"id":32244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32243,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32245,"src":"6790:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":32242,"name":"bytes4","nodeType":"ElementaryTypeName","src":"6790:6:18","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"6789:8:18"},"scope":32246,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"IERC721TokenReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":32231,"nodeType":"StructuredDocumentation","src":"5786:72:18","text":"@dev Note: the ERC-165 identifier for this interface is 0x150b7a02."},"fullyImplemented":false,"linearizedBaseContracts":[32246],"name":"IERC721TokenReceiver","nameLocation":"5868:20:18","scope":32299,"usedErrors":[],"usedEvents":[]},{"id":32270,"nodeType":"ContractDefinition","src":"6997:659:18","nodes":[{"id":32255,"nodeType":"FunctionDefinition","src":"7117:60:18","nodes":[],"documentation":{"id":32250,"nodeType":"StructuredDocumentation","src":"7040:72:18","text":"@notice A descriptive name for a collection of NFTs in this contract"},"functionSelector":"06fdde03","implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"7126:4:18","parameters":{"id":32251,"nodeType":"ParameterList","parameters":[],"src":"7130:2:18"},"returnParameters":{"id":32254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32253,"mutability":"mutable","name":"_name","nameLocation":"7170:5:18","nodeType":"VariableDeclaration","scope":32255,"src":"7156:19:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":32252,"name":"string","nodeType":"ElementaryTypeName","src":"7156:6:18","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7155:21:18"},"scope":32270,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32261,"nodeType":"FunctionDefinition","src":"7245:64:18","nodes":[],"documentation":{"id":32256,"nodeType":"StructuredDocumentation","src":"7183:57:18","text":"@notice An abbreviated name for NFTs in this contract"},"functionSelector":"95d89b41","implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"7254:6:18","parameters":{"id":32257,"nodeType":"ParameterList","parameters":[],"src":"7260:2:18"},"returnParameters":{"id":32260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32259,"mutability":"mutable","name":"_symbol","nameLocation":"7300:7:18","nodeType":"VariableDeclaration","scope":32261,"src":"7286:21:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":32258,"name":"string","nodeType":"ElementaryTypeName","src":"7286:6:18","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7285:23:18"},"scope":32270,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32269,"nodeType":"FunctionDefinition","src":"7580:74:18","nodes":[],"documentation":{"id":32262,"nodeType":"StructuredDocumentation","src":"7315:260:18","text":"@notice A distinct Uniform Resource Identifier (URI) for a given asset.\n @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC\n 3986. The URI may point to a JSON file that conforms to the \"ERC721\n Metadata JSON Schema\"."},"functionSelector":"c87b56dd","implemented":false,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"7589:8:18","parameters":{"id":32265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32264,"mutability":"mutable","name":"_tokenId","nameLocation":"7606:8:18","nodeType":"VariableDeclaration","scope":32269,"src":"7598:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32263,"name":"uint256","nodeType":"ElementaryTypeName","src":"7598:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7597:18:18"},"returnParameters":{"id":32268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32269,"src":"7639:13:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":32266,"name":"string","nodeType":"ElementaryTypeName","src":"7639:6:18","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7638:15:18"},"scope":32270,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":32248,"name":"IERC721","nameLocations":["7026:7:18"],"nodeType":"IdentifierPath","referencedDeclaration":32230,"src":"7026:7:18"},"id":32249,"nodeType":"InheritanceSpecifier","src":"7026:7:18"}],"canonicalName":"IERC721Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":32247,"nodeType":"StructuredDocumentation","src":"6802:195:18","text":"@title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721\n Note: the ERC-165 identifier for this interface is 0x5b5e139f."},"fullyImplemented":false,"linearizedBaseContracts":[32270,32230,32018],"name":"IERC721Metadata","nameLocation":"7007:15:18","scope":32299,"usedErrors":[],"usedEvents":[32129,32138,32147]},{"id":32298,"nodeType":"ContractDefinition","src":"7856:1169:18","nodes":[{"id":32279,"nodeType":"FunctionDefinition","src":"8114:55:18","nodes":[],"documentation":{"id":32274,"nodeType":"StructuredDocumentation","src":"7901:208:18","text":"@notice Count NFTs tracked by this contract\n @return A count of valid NFTs tracked by this contract, where each one of\n them has an assigned and queryable owner not equal to the zero address"},"functionSelector":"18160ddd","implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"8123:11:18","parameters":{"id":32275,"nodeType":"ParameterList","parameters":[],"src":"8134:2:18"},"returnParameters":{"id":32278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32277,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32279,"src":"8160:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32276,"name":"uint256","nodeType":"ElementaryTypeName","src":"8160:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8159:9:18"},"scope":32298,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32287,"nodeType":"FunctionDefinition","src":"8418:70:18","nodes":[],"documentation":{"id":32280,"nodeType":"StructuredDocumentation","src":"8175:238:18","text":"@notice Enumerate valid NFTs\n @dev Throws if `_index` >= `totalSupply()`.\n @param _index A counter less than `totalSupply()`\n @return The token identifier for the `_index`th NFT,\n (sort order not specified)"},"functionSelector":"4f6ccce7","implemented":false,"kind":"function","modifiers":[],"name":"tokenByIndex","nameLocation":"8427:12:18","parameters":{"id":32283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32282,"mutability":"mutable","name":"_index","nameLocation":"8448:6:18","nodeType":"VariableDeclaration","scope":32287,"src":"8440:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32281,"name":"uint256","nodeType":"ElementaryTypeName","src":"8440:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8439:16:18"},"returnParameters":{"id":32286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32287,"src":"8479:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32284,"name":"uint256","nodeType":"ElementaryTypeName","src":"8479:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8478:9:18"},"scope":32298,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":32297,"nodeType":"FunctionDefinition","src":"8930:93:18","nodes":[],"documentation":{"id":32288,"nodeType":"StructuredDocumentation","src":"8494:431:18","text":"@notice Enumerate NFTs assigned to an owner\n @dev Throws if `_index` >= `balanceOf(_owner)` or if\n `_owner` is the zero address, representing invalid NFTs.\n @param _owner An address where we are interested in NFTs owned by them\n @param _index A counter less than `balanceOf(_owner)`\n @return The token identifier for the `_index`th NFT assigned to `_owner`,\n (sort order not specified)"},"functionSelector":"2f745c59","implemented":false,"kind":"function","modifiers":[],"name":"tokenOfOwnerByIndex","nameLocation":"8939:19:18","parameters":{"id":32293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32290,"mutability":"mutable","name":"_owner","nameLocation":"8967:6:18","nodeType":"VariableDeclaration","scope":32297,"src":"8959:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32289,"name":"address","nodeType":"ElementaryTypeName","src":"8959:7:18","sta