[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC721AddressZeroIsNotaValidOwner", "type": "error" }, { "inputs": [], "name": "ERC721ApprovalToCurrentOwner", "type": "error" }, { "inputs": [], "name": "ERC721ApproveCallerIsNotOwnerNorApprovedForAll", "type": "error" }, { "inputs": [], "name": "ERC721ApproveToCaller", "type": "error" }, { "inputs": [], "name": "ERC721InvalidTokenId", "type": "error" }, { "inputs": [], "name": "ERC721MintToTheZeroAddress", "type": "error" }, { "inputs": [], "name": "ERC721NotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "ERC721TokenAlreadyMinted", "type": "error" }, { "inputs": [], "name": "ERC721TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "ERC721TransferToNonReceiverImplementer", "type": "error" }, { "inputs": [], "name": "ERC721TransferToTheZeroAddress", "type": "error" }, { "inputs": [], "name": "RMRKChildAlreadyExists", "type": "error" }, { "inputs": [], "name": "RMRKChildIndexOutOfRange", "type": "error" }, { "inputs": [], "name": "RMRKInvalidChildReclaim", "type": "error" }, { "inputs": [], "name": "RMRKIsNotContract", "type": "error" }, { "inputs": [], "name": "RMRKMaxPendingChildrenReached", "type": "error" }, { "inputs": [], "name": "RMRKMintToNonRMRKImplementer", "type": "error" }, { "inputs": [], "name": "RMRKNestingTooDeep", "type": "error" }, { "inputs": [], "name": "RMRKNestingTransferToDescendant", "type": "error" }, { "inputs": [], "name": "RMRKNestingTransferToNonRMRKNestingImplementer", "type": "error" }, { "inputs": [], "name": "RMRKNestingTransferToSelf", "type": "error" }, { "inputs": [], "name": "RMRKNotApprovedOrDirectOwner", "type": "error" }, { "inputs": [], "name": "RMRKPendingChildIndexOutOfRange", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "AllChildrenRejected", "type": "event" }, { "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "childAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "childId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "childIndex", "type": "uint256" } ], "name": "ChildAccepted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "childAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "childId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "childIndex", "type": "uint256" } ], "name": "ChildProposed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "childAddress", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "childId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "childIndex", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "fromPending", "type": "bool" } ], "name": "ChildUnnested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "_voter", "type": "address" } ], "name": "StoryVoted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "acceptChild", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "parentTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "childTokenId", "type": "uint256" } ], "name": "addChild", "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": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "burnChild", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "parentTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "childOf", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "contractAddress", "type": "address" } ], "internalType": "struct IRMRKNesting.Child", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "parentTokenId", "type": "uint256" } ], "name": "childrenOf", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "contractAddress", "type": "address" } ], "internalType": "struct IRMRKNesting.Child[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gimmicks", "outputs": [ { "internalType": "contract Gimmicks", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "hasVotedByTokenId", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "metadataByTokenId", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "destinationId", "type": "uint256" } ], "name": "nestTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "parentTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "pendingChildOf", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "contractAddress", "type": "address" } ], "internalType": "struct IRMRKNesting.Child", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "parentTokenId", "type": "uint256" } ], "name": "pendingChildrenOf", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "contractAddress", "type": "address" } ], "internalType": "struct IRMRKNesting.Child[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "metadataURI", "type": "string" }, { "internalType": "uint256", "name": "destinationId", "type": "uint256" } ], "name": "publishStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "childAddress", "type": "address" }, { "internalType": "uint256", "name": "childTokenId", "type": "uint256" } ], "name": "reclaimChild", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "rejectAllChildren", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "rmrkOwnerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "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": "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": "address", "name": "_gimmicks", "type": "address" } ], "name": "setGimmicks", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bool", "name": "isPending", "type": "bool" } ], "name": "unnestChild", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "vote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "votesByTokenId", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" } ]
608060405260006010553480156200001657600080fd5b5060405162003602380380620036028339810160408190526200003991620001a4565b8181818160006200004b83826200029d565b5060016200005a82826200029d565b505050505062000079620000736200008160201b60201c565b62000085565b505062000369565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000ff57600080fd5b81516001600160401b03808211156200011c576200011c620000d7565b604051601f8301601f19908116603f01168101908282118183101715620001475762000147620000d7565b816040528381526020925086838588010111156200016457600080fd5b600091505b8382101562000188578582018301518183018401529082019062000169565b838211156200019a5760008385830101525b9695505050505050565b60008060408385031215620001b857600080fd5b82516001600160401b0380821115620001d057600080fd5b620001de86838701620000ed565b93506020850151915080821115620001f557600080fd5b506200020485828601620000ed565b9150509250929050565b600181811c908216806200022357607f821691505b6020821081036200024457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029857600081815260208120601f850160051c81016020861015620002735750805b601f850160051c820191505b8181101562000294578281556001016200027f565b5050505b505050565b81516001600160401b03811115620002b957620002b9620000d7565b620002d181620002ca84546200020e565b846200024a565b602080601f831160018114620003095760008415620002f05750858301515b600019600386901b1c1916600185901b17855562000294565b600085815260208120601f198616915b828110156200033a5788860151825594840194600190910190840162000319565b5085821015620003595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61328980620003796000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80636f19951c11610146578063a695db2c116100c3578063c87b56dd11610087578063c87b56dd146105a4578063d547741f146105b7578063e5f2e9e4146105ca578063e985e9c5146105dd578063ed45ca9e146105f0578063f2fde38b1461060357600080fd5b8063a695db2c14610511578063a898e36414610531578063afc523f614610544578063b3556b8e1461057e578063b88d4fde1461059157600080fd5b806391d148541161010a57806391d14854146104ad57806392dfce82146104c057806395d89b41146104ee578063a217fddf146104f6578063a22cb465146104fe57600080fd5b80636f19951c1461045b57806370a082311461046e578063715018a614610481578063849d8605146104895780638da5cb5b1461049c57600080fd5b80632f32f937116101df57806342966c68116101a357806342966c68146103dc57806344ec9344146103ef5780635a4814741461040f5780636352211e14610422578063666d36d3146104355780636ad210641461044857600080fd5b80632f32f937146103705780632fb59acf1461039057806335440faf146103a357806336568abe146103b657806342842e0e146103c957600080fd5b806322321e611161022657806322321e61146102f357806323b872dd14610306578063248a9ca3146103195780632f183a181461034a5780632f2ff15d1461035d57600080fd5b80630121b93f1461026357806301ffc9a71461027857806306fdde03146102a0578063081812fc146102b5578063095ea7b3146102e0575b600080fd5b6102766102713660046129eb565b610616565b005b61028b610286366004612a1a565b610833565b60405190151581526020015b60405180910390f35b6102a86108a0565b6040516102979190612a8f565b6102c86102c33660046129eb565b610932565b6040516001600160a01b039091168152602001610297565b6102766102ee366004612ab7565b610978565b610276610301366004612af1565b610a04565b610276610314366004612b3b565b610a21565b61033c6103273660046129eb565b6000908152600c602052604090206001015490565b604051908152602001610297565b610276610358366004612c08565b610a3c565b61027661036b366004612c61565b610b6e565b61038361037e366004612c91565b610b94565b6040516102979190612cb3565b61027661039e366004612cd3565b610c2d565b6102766103b1366004612c91565b610dea565b6102766103c4366004612c61565b610f27565b6102766103d7366004612b3b565b610fa1565b6102766103ea3660046129eb565b610fbc565b6104026103fd3660046129eb565b611101565b6040516102979190612cfa565b6102a861041d3660046129eb565b611180565b6102c86104303660046129eb565b61121a565b610276610443366004612c91565b6112aa565b610276610456366004612d5a565b6112ff565b6104026104693660046129eb565b61134b565b61033c61047c366004612d5a565b6113bb565b610276611400565b6011546102c8906001600160a01b031681565b600b546001600160a01b03166102c8565b61028b6104bb366004612c61565b611436565b61028b6104ce366004612c61565b600f60209081526000928352604080842090915290825290205460ff1681565b6102a8611461565b61033c600081565b61027661050c366004612d77565b611470565b61033c61051f3660046129eb565b600e6020526000908152604090205481565b61038361053f366004612c91565b611505565b6105576105523660046129eb565b611562565b604080516001600160a01b0390941684526020840192909252151590820152606001610297565b61027661058c3660046129eb565b6115e3565b61027661059f366004612da5565b611633565b6102a86105b23660046129eb565b611649565b6102766105c5366004612c61565b611751565b6102766105d8366004612e25565b611777565b61028b6105eb366004612e6b565b61178d565b6102766105fe366004612c91565b6117bb565b610276610611366004612d5a565b611911565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106839190612e99565b116106df5760405162461bcd60e51b815260206004820152602160248201527f596f75206e65656420746f206f776e20612047696d6d69636b20746f20766f746044820152606560f81b60648201526084015b60405180910390fd5b6000818152600660205260409020600101546001600160a01b031661073d5760405162461bcd60e51b815260206004820152601460248201527314dd1bdc9e48191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016106d6565b6000818152600f6020908152604080832033845290915290205460ff16156107b35760405162461bcd60e51b8152602060048201526024808201527f596f75206861766520616c726561647920766f746564206f6e20746869732073604482015263746f727960e01b60648201526084016106d6565b6000818152600e602052604081208054916107cd83612ec8565b90915550506000818152600f602090815260408083203380855290835292819020805460ff191660011790558051848152918201929092527f42ca3301a966ec6df48c72d6fa45116a737f0d4644cc69a880749165356caca2910160405180910390a150565b60006001600160e01b031982166301ffc9a760e01b148061086457506001600160e01b031982166380ac58cd60e01b145b8061087f57506001600160e01b03198216635b5e139f60e01b145b8061089a57506001600160e01b0319821663c71287ad60e01b145b92915050565b6060600080546108af90612ee7565b80601f01602080910402602001604051908101604052809291908181526020018280546108db90612ee7565b80156109285780601f106108fd57610100808354040283529160200191610928565b820191906000526020600020905b81548152906001019060200180831161090b57829003601f168201915b5050505050905090565b600061093d826119ac565b6000828152600460205260408120906109558461121a565b6001600160a01b0390811682526020820192909252604001600020541692915050565b60006109838261121a565b9050806001600160a01b0316836001600160a01b0316036109b757604051630591db6d60e01b815260040160405180910390fd5b336001600160a01b038216148015906109d757506109d5813361178d565b155b156109f557604051634c12315960e11b815260040160405180910390fd5b6109ff83836119e4565b505050565b83610a0e81611a5d565b610a1a85858585611a84565b5050505050565b80610a2b81611c14565b610a36848484611c3b565b50505050565b6011546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190612f21565b6001600160a01b031614610b0d5760405162461bcd60e51b815260206004820152602560248201527f596f7520617265206e6f7420746865206f776e6572206f6620746869732047696044820152646d6d69636b60d81b60648201526084016106d6565b60108054906000610b1d83612f3e565b90915550506010546000908152600d60205260409020610b3d8382612f9e565b50601080546000908152600e60205260408120556011549054610b6a916001600160a01b03169083611d4d565b5050565b6000828152600c6020526040902060010154610b8a8133611e19565b6109ff8383611e7d565b604080518082019091526000808252602082015281610bb28461134b565b5111610bd15760405163653e642560e11b815260040160405180910390fd5b6000838152600760205260408120805484908110610bf157610bf161305e565b60009182526020918290206040805180820190915260029092020180548252600101546001600160a01b03169181019190915291505092915050565b82610c3781611a5d565b6001600160a01b038316600090815260096020908152604080832085845290915290205415610c7957604051633ece094960e01b815260040160405180910390fd5b6001600160a01b0383166000908152600a6020908152604080832085845290915290205415610cbb57604051633ece094960e01b815260040160405180910390fd5b6000806000856001600160a01b031663afc523f6866040518263ffffffff1660e01b8152600401610cee91815260200190565b606060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190613074565b919450925090506001600160a01b03831630141580610d4e5750868214155b80610d57575080155b15610d7557604051633ece094960e01b815260040160405180910390fd5b60408051632142170760e11b81523060048201523360248201526044810187905290516001600160a01b038816916342842e0e91606480830192600092919082900301818387803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b5050505050505050505050565b610df3826119ac565b333b610e125760405163b9d3114760e01b815260040160405180910390fd5b60006040518060400160405280838152602001610e2c3390565b6001600160a01b0316905290506000610e4484611101565b5190506080811015610ec357602082810180516001600160a01b039081166000908152600a84526040808220875183528552808220600190819055898352600886529082208054808301825590835294909120865160029095020193845591519290910180546001600160a01b03191692909116919091179055610edc565b60405163a53c8c0560e01b815260040160405180910390fd5b82336001600160a01b0316857fdfb23fa68267b8a66ca315a36a29889d77a420b34073629782071a4cdd02ba9784604051610f1991815260200190565b60405180910390a450505050565b6001600160a01b0381163314610f975760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106d6565b610b6a8282611f03565b6109ff83838360405180602001604052806000815250611633565b80610fc681611c14565b6000610fd183611562565b505090506000610fe08461121a565b6001600160a01b0383166000908152600360205260408120805492935060019290919061100e9084906130b7565b909155506110199050565b6110246000856119e4565b600061102f8561134b565b805190915060005b81811015611051576110498782611f6a565b600101611037565b50600086815260066020908152604080832083815560010180546001600160a81b031916905560089091528120611087916129a4565b600086815260076020526040812061109e916129a4565b60008681526004602090815260408083206001600160a01b038716808552925280832080546001600160a01b031916905551889291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050505050565b6000818152600860209081526040808320805482518185028101850190935280835260609493849084015b828210156111745760008481526020908190206040805180820190915260028502909101805482526001908101546001600160a01b031682840152908352909201910161112c565b50929695505050505050565b600d602052600090815260409020805461119990612ee7565b80601f01602080910402602001604051908101604052809291908181526020018280546111c590612ee7565b80156112125780601f106111e757610100808354040283529160200191611212565b820191906000526020600020905b8154815290600101906020018083116111f557829003601f168201915b505050505081565b60008060008061122985611562565b92509250925080156112a1576040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e90602401602060405180830381865afa15801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129e9190612f21565b92505b50909392505050565b816112b481611c14565b816112be8461134b565b51116112dd5760405163653e642560e11b815260040160405180910390fd5b6112e78383611f6a565b60008381526007602052604090206109ff9083612003565b600b546001600160a01b031633146113295760405162461bcd60e51b81526004016106d6906130ce565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526007602090815260408083208054825181850281018501909352808352606094938490840182156111745760008481526020908190206040805180820190915260028502909101805482526001908101546001600160a01b031682840152908352909201910161112c565b60006001600160a01b0382166113e457604051633bb9143360e11b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0316331461142a5760405162461bcd60e51b81526004016106d6906130ce565b61143460006120bd565b565b6000918252600c602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600180546108af90612ee7565b6001600160a01b038216330361149957604051630b7b99b960e21b815260040160405180910390fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60408051808201909152600080825260208201528161152384611101565b51116115425760405163da22687f60e01b815260040160405180910390fd5b6000838152600860205260408120805484908110610bf157610bf161305e565b60008181526006602090815260408083208151606081018352815481526001909101546001600160a01b038116938201849052600160a01b900460ff1615159181019190915282918291906115ca5760405163089ba7e160e41b815260040160405180910390fd5b6020810151815160409092015190969195509350915050565b806115ed81611a5d565b6000828152600860205260408120611604916129a4565b60405182907f8ac4a0d65950c3e40448afb2260e2e0ec36ea15644d9b39e37e85472e5f9445190600090a25050565b8161163d81611c14565b610a1a8585858561210f565b6000818152600660205260409020600101546060906001600160a01b03166116b35760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e0060448201526064016106d6565b6000828152600d6020526040902080546116cc90612ee7565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890612ee7565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b50505050509050919050565b6000828152600c602052604090206001015461176d8133611e19565b6109ff8383611f03565b8161178181611c14565b610a1a85858585612143565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b816117c581611a5d565b816117cf84611101565b51116117ee5760405163da22687f60e01b815260040160405180910390fd5b60006117fa8484611505565b6020808201516001600160a01b03166000908152600982526040808220845183529092522054909150156118415760405163188a497360e01b815260040160405180910390fd5b60008481526008602052604090206118599084612003565b602081810180516001600160a01b039081166000908152600a84526040808220865183528552808220829055888252600785528082208054600180820183559184528684208851600290920201908155855190820180546001600160a01b03191691861691821790558352600986528183208751845286529181902091909155845192519051878152929391169187917f368600bdce8b2f9bdb235c221e348573e2f531747cb749ecf6cf43fa0e9d8fe89101610f19565b600b546001600160a01b0316331461193b5760405162461bcd60e51b81526004016106d6906130ce565b6001600160a01b0381166119a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d6565b6119a9816120bd565b50565b6000818152600660205260409020600101546001600160a01b03166119a95760405163089ba7e160e41b815260040160405180910390fd5b60006119ef8261121a565b60008381526004602090815260408083206001600160a01b038581168086529190935281842080546001600160a01b031916938916938417905590519394508593919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b611a673382612316565b6119a9576040516302728a9d60e41b815260040160405180910390fd5b60408051808201909152600080825260208201528115611aec57611aa88585611505565b6020808201516001600160a01b03166000908152600a82526040808220845183528352808220829055888252600890925220909150611ae79085612003565b611b35565b611af68585610b94565b6020808201516001600160a01b03166000908152600982526040808220845183528352808220829055888252600790925220909150611b359085612003565b6001600160a01b03831615611bb55760208101518151604051632142170760e11b81523060048201526001600160a01b03868116602483015260448201929092529116906342842e0e90606401600060405180830381600087803b158015611b9c57600080fd5b505af1158015611bb0573d6000803e3d6000fd5b505050505b806000015181602001516001600160a01b0316867fc80f74751c3fe8525f255ff6e710fc9ffe8cc950bd96642622f1ccfeae397aa18786604051611c059291909182521515602082015260400190565b60405180910390a45050505050565b611c1e3382612375565b6119a9576040516345f3c98360e11b815260040160405180910390fd5b6000611c4682611562565b50509050836001600160a01b0316816001600160a01b031614611c7c5760405163e146af6f60e01b815260040160405180910390fd5b6001600160a01b038316611ca3576040516338f646ff60e21b815260040160405180910390fd5b6001600160a01b0384166000908152600360205260408120805460019290611ccc9084906130b7565b90915550611cdf905082600085816123f8565b6001600160a01b0383166000908152600360205260408120805460019290611d08908490613103565b909155505060405182906001600160a01b0380861691908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4610a36565b6001600160a01b0383163b611d755760405163b9d3114760e01b815260040160405180910390fd5b6040516301ffc9a760e01b815263c71287ad60e01b60048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa158015611dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de4919061311b565b611e0157604051631cc5525760e31b815260040160405180910390fd5b611e0c83838361246f565b6109ff8282600086612563565b611e238282611436565b610b6a57611e3b816001600160a01b0316601461260e565b611e4683602061260e565b604051602001611e57929190613138565b60408051601f198184030181529082905262461bcd60e51b82526106d691600401612a8f565b611e878282611436565b610b6a576000828152600c602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611ebf3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611f0d8282611436565b15610b6a576000828152600c602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611f768383610b94565b602080820180516001600160a01b0390811660009081526009845260408082208651835290945283812055905183519251630852cd8d60e31b815293945016916342966c6891611fcc9160040190815260200190565b600060405180830381600087803b158015611fe657600080fd5b505af1158015611ffa573d6000803e3d6000fd5b50505050505050565b81548290612013906001906130b7565b815481106120235761202361305e565b90600052602060002090600202018282815481106120435761204361305e565b600091825260209091208254600290920201908155600191820154910180546001600160a01b0319166001600160a01b03909216919091179055815482908061208e5761208e6131ad565b60008281526020812060026000199093019283020190815560010180546001600160a01b031916905590555050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61211a848484611c3b565b612126848484846127b1565b610a365760405163bcb5663760e01b815260040160405180910390fd5b600061214e83611562565b50509050846001600160a01b0316816001600160a01b0316146121845760405163e146af6f60e01b815260040160405180910390fd5b6001600160a01b0384166121ab576040516338f646ff60e21b815260040160405180910390fd5b6001600160a01b038416301480156121c257508183145b156121e0576040516304ae5fdd60e41b815260040160405180910390fd5b6001600160a01b0384163b6122085760405163b9d3114760e01b815260040160405180910390fd5b6040516301ffc9a760e01b815263c71287ad60e01b60048201526001600160a01b038516906301ffc9a790602401602060405180830381865afa158015612253573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612277919061311b565b61229457604051636464a3e360e11b815260040160405180910390fd5b61229f8385846128b3565b6001600160a01b03851660009081526003602052604081208054600192906122c89084906130b7565b909155506122db905083838660016123f8565b6001600160a01b0384166000908152600360205260408120805460019290612304908490613103565b90915550610a1a905083838787612563565b6000806123228361121a565b9050806001600160a01b0316846001600160a01b031614806123495750612349818561178d565b8061236d5750836001600160a01b031661236284610932565b6001600160a01b0316145b949350505050565b600080600061238384611562565b5091509150806000146123a657506001600160a01b03848116911614905061089a565b816001600160a01b0316856001600160a01b031614806123cb57506123cb828661178d565b806123ef5750846001600160a01b03166123e485610932565b6001600160a01b0316145b95945050505050565b604080516060810182528481526001600160a01b03808516602080840191825285151584860190815260008a815260069092529481209351845590516001909301805494511515600160a01b026001600160a81b031990951693909216929092179290921790915561246a90856119e4565b610a36565b6001600160a01b038316612496576040516325bd6bd360e01b815260040160405180910390fd5b6000828152600660205260409020600101546001600160a01b0316156124cf5760405163c5a8d37160e01b815260040160405180910390fd5b6001600160a01b03831660009081526003602052604081208054600192906124f8908490613103565b9091555050604080516060810182528281526001600160a01b039485166020808301918252931515828401908152600095865260069094529190932092518355516001909201805491511515600160a01b026001600160a81b03199092169290931691909117179055565b6040516335440faf60e01b8152600481018490526024810185905281906001600160a01b038216906335440faf90604401600060405180830381600087803b1580156125ae57600080fd5b505af11580156125c2573d6000803e3d6000fd5b5050505084826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6060600061261d8360026131c3565b612628906002613103565b67ffffffffffffffff81111561264057612640612b7c565b6040519080825280601f01601f19166020018201604052801561266a576020820181803683370190505b509050600360fc1b816000815181106126855761268561305e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126b4576126b461305e565b60200101906001600160f81b031916908160001a90535060006126d88460026131c3565b6126e3906001613103565b90505b600181111561275b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106127175761271761305e565b1a60f81b82828151811061272d5761272d61305e565b60200101906001600160f81b031916908160001a90535060049490941c93612754816131e2565b90506126e6565b5083156127aa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d6565b9392505050565b60006001600160a01b0384163b156128a857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127f59033908990889088906004016131f9565b6020604051808303816000875af1925050508015612830575060408051601f3d908101601f1916820190925261282d91810190613236565b60015b61288e573d80801561285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b5080516000036128865760405163bcb5663760e01b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061236d565b506001949350505050565b60005b606481101561298a576000806000856001600160a01b031663afc523f6866040518263ffffffff1660e01b81526004016128f291815260200190565b606060405180830381865afa15801561290f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129339190613074565b925092509250806129475750505050505050565b6001600160a01b0383163014801561295e57508682145b1561297c57604051630399e00d60e21b815260040160405180910390fd5b5090935091506001016128b6565b5060405163ccc8bb6b60e01b815260040160405180910390fd5b50805460008255600202906000526020600020908101906119a991905b808211156129e757600081556001810180546001600160a01b03191690556002016129c1565b5090565b6000602082840312156129fd57600080fd5b5035919050565b6001600160e01b0319811681146119a957600080fd5b600060208284031215612a2c57600080fd5b81356127aa81612a04565b60005b83811015612a52578181015183820152602001612a3a565b83811115610a365750506000910152565b60008151808452612a7b816020860160208601612a37565b601f01601f19169290920160200192915050565b6020815260006127aa6020830184612a63565b6001600160a01b03811681146119a957600080fd5b60008060408385031215612aca57600080fd5b8235612ad581612aa2565b946020939093013593505050565b80151581146119a957600080fd5b60008060008060808587031215612b0757600080fd5b84359350602085013592506040850135612b2081612aa2565b91506060850135612b3081612ae3565b939692955090935050565b600080600060608486031215612b5057600080fd5b8335612b5b81612aa2565b92506020840135612b6b81612aa2565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612bad57612bad612b7c565b604051601f8501601f19908116603f01168101908282118183101715612bd557612bd5612b7c565b81604052809350858152868686011115612bee57600080fd5b858560208301376000602087830101525050509392505050565b60008060408385031215612c1b57600080fd5b823567ffffffffffffffff811115612c3257600080fd5b8301601f81018513612c4357600080fd5b612c5285823560208401612b92565b95602094909401359450505050565b60008060408385031215612c7457600080fd5b823591506020830135612c8681612aa2565b809150509250929050565b60008060408385031215612ca457600080fd5b50508035926020909101359150565b815181526020808301516001600160a01b0316908201526040810161089a565b600080600060608486031215612ce857600080fd5b833592506020840135612b6b81612aa2565b602080825282518282018190526000919060409081850190868401855b82811015612d4d57612d3d848351805182526020908101516001600160a01b0316910152565b9284019290850190600101612d17565b5091979650505050505050565b600060208284031215612d6c57600080fd5b81356127aa81612aa2565b60008060408385031215612d8a57600080fd5b8235612d9581612aa2565b91506020830135612c8681612ae3565b60008060008060808587031215612dbb57600080fd5b8435612dc681612aa2565b93506020850135612dd681612aa2565b925060408501359150606085013567ffffffffffffffff811115612df957600080fd5b8501601f81018713612e0a57600080fd5b612e1987823560208401612b92565b91505092959194509250565b60008060008060808587031215612e3b57600080fd5b8435612e4681612aa2565b93506020850135612e5681612aa2565b93969395505050506040820135916060013590565b60008060408385031215612e7e57600080fd5b8235612e8981612aa2565b91506020830135612c8681612aa2565b600060208284031215612eab57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001600160ff1b018201612ee057612ee0612eb2565b5060010190565b600181811c90821680612efb57607f821691505b602082108103612f1b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612f3357600080fd5b81516127aa81612aa2565b600060018201612ee057612ee0612eb2565b601f8211156109ff57600081815260208120601f850160051c81016020861015612f775750805b601f850160051c820191505b81811015612f9657828155600101612f83565b505050505050565b815167ffffffffffffffff811115612fb857612fb8612b7c565b612fcc81612fc68454612ee7565b84612f50565b602080601f8311600181146130015760008415612fe95750858301515b600019600386901b1c1916600185901b178555612f96565b600085815260208120601f198616915b8281101561303057888601518255948401946001909101908401613011565b508582101561304e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60008060006060848603121561308957600080fd5b835161309481612aa2565b6020850151604086015191945092506130ac81612ae3565b809150509250925092565b6000828210156130c9576130c9612eb2565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561311657613116612eb2565b500190565b60006020828403121561312d57600080fd5b81516127aa81612ae3565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613170816017850160208801612a37565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516131a1816028840160208801612a37565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60008160001904831182151516156131dd576131dd612eb2565b500290565b6000816131f1576131f1612eb2565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061322c90830184612a63565b9695505050505050565b60006020828403121561324857600080fd5b81516127aa81612a0456fea26469706673582212201543d5b06570bb3d3e19bc6b92235a1c9028600645277d8d3d493d8f8f23ac4a64736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000f47696d6d69636b7353746f7269657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006474d4b5354520000000000000000000000000000000000000000000000000000