[ { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "InvalidSize", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MetadataUpdateBlocked", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "NotAContract", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "size", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "editionTokenManager", "type": "address" } ], "name": "EditionCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "operator", "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": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" } ], "name": "createEdition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "bytes", "name": "auctionData", "type": "bytes" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" } ], "name": "createEditionWithAuction", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionCurrentSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionMaxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionStartId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "editionURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "getEditionDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getEditionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEditionStartIds", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "editionIds", "type": "uint256[]" } ], "name": "getEditionsDetailsAndUri", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails[]", "name": "", "type": "tuple[]" }, { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFiltererRegistry", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setEditionURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRegistry", "type": "address" }, { "internalType": "address", "name": "subscription", "type": "address" } ], "name": "setRegistryAndSubscription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "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": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenManagerByTokenId", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615cbb80620000216000396000f3fe608060405234801561001057600080fd5b50600436106102a95760003560e01c806301ffc9a7146102ae578063063a7502146102d65780630690a78d146102e057806306fdde03146102f3578063081812fc14610308578063095ea7b31461032857806317360d341461033b57806318160ddd1461035c57806318bae6c8146103725780631b30808d1461038557806323b872dd146103985780632a55205a146103ab5780632a5ac764146103cc578063336211bf146103df578063377e5e27146103f257806342842e0e1461040557806342966c6814610418578063439fab911461042b57806346134b501461043e57806347230dcb146104515780634f58122a1461046457806350cf5a3114610477578063572b6c051461048a5780636352211e1461049d5780636502abea146104b0578063662fff38146104c3578063703c19d7146104d657806370a08231146104eb578063715018a6146104fe578063752d4cad1461050657806375794a3c14610519578063834a20df146105235780638da5cb5b1461053657806391d0049e1461053e578063921727041461055157806395d89b4114610564578063994d8d9a1461056c578063a22cb4651461057f578063a305f5b214610592578063b0e5afe3146105a5578063b5c5801e146105b9578063b859c935146105c1578063b88d4fde146105d4578063bfb2995c146105e7578063c2f50701146105fa578063c73ef57314610602578063c87b56dd14610615578063ddf990f914610628578063e8a3d48514610648578063e985e9c514610650578063eb87215014610663578063ee295d6214610676578063ee947a9a14610689578063eeab05891461069c578063ef60ceaf146106af578063f2fde38b146106c2578063f775baac146106d5578063f97b57ec146106e8578063fac70dc9146106fd575b600080fd5b6102c16102bc36600461470a565b610710565b60405190151581526020015b60405180910390f35b6102de610721565b005b6102de6102ee366004614768565b6107e1565b6102fb610a1c565b6040516102cd9190614800565b61031b610316366004614813565b610aaf565b6040516102cd9190614839565b6102de610336366004614862565b610ad7565b61034e6103493660046148d2565b610af0565b6040516102cd9291906149a7565b610364610c43565b6040519081526020016102cd565b60cb5461031b906001600160a01b031681565b610364610393366004614a1d565b610c97565b6102de6103a6366004614a55565b610d2b565b6103be6103b9366004614a85565b610d6c565b6040516102cd929190614aa7565b6102de6103da366004614ac0565b610d8c565b6103646103ed366004614813565b610e22565b6102fb610400366004614813565b610e4a565b6102de610413366004614a55565b610f0b565b6102de610426366004614813565b610f26565b6102de610439366004614b59565b6110ec565b61031b61044c366004614813565b611266565b6102de61045f366004614b8e565b611274565b6102de6104723660046148d2565b611328565b6102de610485366004614b8e565b61154a565b6102c1610498366004614b8e565b6116e7565b61031b6104ab366004614813565b6116fb565b61031b6104be366004614813565b611717565b6103646104d1366004614c6e565b611742565b6104de6117bb565b6040516102cd9190614cf8565b6103646104f9366004614b8e565b611813565b6102de611880565b6102de610514366004614d0b565b611892565b6103646101375481565b6102de610531366004614b8e565b6118a4565b61031b611922565b61036461054c366004614e25565b611931565b61036461055f366004614ea0565b611b14565b6102fb611b9a565b61036461057a366004614edc565b611baa565b6102de61058d366004614f81565b611d3a565b6102de6105a0366004614b8e565b611d4e565b6101355461031b906001600160a01b031681565b6102de611eb2565b6103646105cf366004614faf565b612006565b6102de6105e2366004614fd4565b612080565b6102de6105f536600461503f565b6120bf565b6102de6123df565b610364610610366004614813565b6124f0565b6102fb610623366004614813565b612512565b61063b610636366004614813565b6125e0565b6040516102cd91906150d8565b6102fb612611565b6102c161065e366004614d0b565b6126a0565b60d05461031b906001600160a01b031681565b60cf5461031b906001600160a01b031681565b610364610697366004614813565b6126cf565b6102de6106aa3660046150eb565b6126e0565b6102de6106bd366004615156565b6129aa565b6102de6106d0366004614b8e565b612b7e565b6103646106e3366004614e25565b612bf4565b6106f0612d31565b6040516102cd9190615168565b61036461070b366004614813565b612d42565b600061071b82612d53565b92915050565b610729612da3565b610731612e12565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b505050506107df6001609755565b565b60006107ec84611717565b905060006107f8612e73565b90506001600160a01b038216610842576000610812611922565b9050806001600160a01b0316826001600160a01b03161461083c5761083c6282b42960e81b612e7d565b506108d0565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e9061087990309085908a908a908a906006906004016151f4565b6020604051808303816000875af1158015610898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bc919061524b565b6108d0576108d0631b04458960e01b612e7d565b600085815261013b602052604090206108ea9085856145bf565b5060408051600180825281830190925260009160208083019080368337019050509050858160008151811061092157610921615268565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161094357905050905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508551869450909250151590506109a4576109a4615268565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906109e1908590859060040161527e565b600060405180830381600087803b1580156109fb57600080fd5b505af1158015610a0f573d6000803e3d6000fd5b5050505050505050505050565b60606101038054610a2c906152a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a58906152a3565b8015610aa55780601f10610a7a57610100808354040283529160200191610aa5565b820191906000526020600020905b815481529060010190602001808311610a8857829003601f168201915b5050505050905090565b6000610aba82612e86565b50600090815261010760205260409020546001600160a01b031690565b81610ae181612ed6565b610aeb8383612f70565b505050565b606080826000816001600160401b03811115610b0e57610b0e614bab565b604051908082528060200260200182016040528015610b4757816020015b610b34614643565b815260200190600190039081610b2c5790505b5090506000826001600160401b03811115610b6457610b64614bab565b604051908082528060200260200182016040528015610b9757816020015b6060815260200190600190039081610b825790505b50905060005b83811015610c3457610bc6888883818110610bba57610bba615268565b90506020020135610e4a565b828281518110610bd857610bd8615268565b6020026020010181905250610c04888883818110610bf857610bf8615268565b90506020020135613080565b838281518110610c1657610c16615268565b60200260200101819052508080610c2c906152ee565b915050610b9d565b509093509150505b9250929050565b600080805b61013854811015610c91576101388181548110610c6757610c67615268565b906000526020600020015482610c7d9190615309565b915080610c89816152ee565b915050610c48565b50919050565b6000610cac610ca4612e73565b60c990613119565b610cc057610cc0633e34a41b60e21b612e7d565b610cc8612e12565b60cf54600160a01b900460ff1660011415610ced57610ced6345a9661760e01b612e7d565b610cf984610138541190565b610d0d57610d0d63eb49290360e01b612e7d565b610d1884848461312e565b9050610d246001609755565b9392505050565b610d3c610d36612e73565b82613226565b610d615760405162461bcd60e51b8152600401610d5890615321565b60405180910390fd5b610aeb838383613284565b600080610d81610d7b85613404565b846134a8565b915091509250929050565b610d94612da3565b610da086868686613543565b610dad61013683836145bf565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610de890899089908990899089908990600401615356565b600060405180830381600087803b158015610e0257600080fd5b505af1158015610e16573d6000803e3d6000fd5b50505050505050505050565b6000610e2d8261355e565b610e4157610e4163677510db60e11b612e7d565b61071b82613404565b6060610e5882610138541190565b610e6c57610e6c63eb49290360e01b612e7d565b600082815261013b602052604090208054610e86906152a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb2906152a3565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b50505050509050919050565b610aeb83838360405180602001604052806000815250612080565b610f2e612e12565b6000610f3982610e22565b90506000610f4682611717565b90506000610f52612e73565b90506001600160a01b03821615801590610fdb57506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a790610f9a9063129dae8b60e01b9060040161539f565b602060405180830381865afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb919061524b565b1561104f57816001600160a01b031663129dae8b82610ff9876116fb565b866040518463ffffffff1660e01b8152600401611018939291906153b4565b600060405180830381600087803b15801561103257600080fd5b505af1158015611046573d6000803e3d6000fd5b5050505061106c565b6110598185613226565b61106c5761106c6282b42960e81b612e7d565b6110758461357c565b60d0546040516323de665160e01b81526001600160a01b03909116906323de6651906110aa90849060009089906004016153b4565b600060405180830381600087803b1580156110c457600080fd5b505af11580156110d8573d6000803e3d6000fd5b505050505050506110e96001609755565b50565b600054610100900460ff161580801561110c5750600054600160ff909116105b8061112d575061111b3061361a565b15801561112d575060005460ff166001145b6111905760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610d58565b6000805460ff1916600117905580156111b3576000805461ff0019166101001790555b6000808080808080806111c88a8c018c6153e3565b975097509750975097509750975097506000604051806040016040528060006001600160a01b03168152602001600061ffff168152509050611213898260008b8b8b8b8b8b8b613629565b5050505050505050508015610aeb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600061071b6104be83610e22565b61127c612da3565b61128760c98261373a565b61129b5761129b63ea6eb5c360e01b612e7d565b6040516001906001600160a01b03831690600080516020615c4f83398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112f39084906001906004016154d2565b600060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b5050505050565b611330612e12565b600061133a612e73565b90508160005b8181101561149c57600060cc600087878581811061136057611360615268565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061139a5761139a635f98be1560e11b612e7d565b806001600160a01b031663ce2003a5858888868181106113bc576113bc615268565b905060200201356040518363ffffffff1660e01b81526004016113e0929190614aa7565b6020604051808303816000875af11580156113ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611423919061524b565b6114375761143763251c48e160e11b612e7d565b600060cc600088888681811061144f5761144f615268565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080611494906152ee565b915050611340565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa84846040516114ce929190615523565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906115089087908790600401615523565b600060405180830381600087803b15801561152257600080fd5b505af1158015611536573d6000803e3d6000fd5b5050505050506115466001609755565b5050565b611552612e12565b61155b8161374f565b61156f5761156f631a7387bd60e11b612e7d565b6000611579612e73565b60cf549091506001600160a01b0316806115c157611595611922565b6001600160a01b0316826001600160a01b0316146115bc576115bc6282b42960e81b612e7d565b611644565b60405163bcdbc94760e01b81526001600160a01b0382169063bcdbc947906115ef9086908690600401615537565b602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611630919061524b565b6116445761164463e10a050560e01b612e7d565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615c8f83398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906116a9908690600401614839565b600060405180830381600087803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b5050505050506110e96001609755565b6065546001600160a01b0391821691161490565b600090815261010560205260409020546001600160a01b031690565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015610c915792915050565b600061174f610ca4612e73565b61176357611763633e34a41b60e21b612e7d565b61176b612e12565b60cf54600160a01b900460ff1660011415611790576117906345a9661760e01b612e7d565b61179c84610138541190565b6117b0576117b063eb49290360e01b612e7d565b610d1884848461376b565b606061013a805480602002602001604051908101604052809291908181526020018280548015610aa557602002820191906000526020600020905b8154815260200190600101908083116117f6575050505050905090565b60006001600160a01b0382166118635760405162461bcd60e51b815260206004820152601560248201527422a9219b99189d1024b73b30b634b21037bbb732b960591b6044820152606401610d58565b506001600160a01b03166000908152610106602052604090205490565b611888612da3565b6107df60006138a8565b61189a612da3565b61154682826138fa565b6118ac612da3565b6118b760c9826139a1565b6118cb576118cb63ea6eb5c360e01b612e7d565b6040516000906001600160a01b03831690600080516020615c4f833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112f39084906000906004016154d2565b6033546001600160a01b031690565b600061193b612da3565b611943612e12565b60006119508888886139b6565b85519091506001600160a01b0316156119a557600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611afe57600080808080808080806119c18c8e018e615567565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b8152600401611ac29190615631565b600060405180830381600087803b158015611adc57600080fd5b505af1158015611af0573d6000803e3d6000fd5b505050505050505050505050505b9050611b0a6001609755565b9695505050505050565b6000611b21610ca4612e73565b611b3557611b35633e34a41b60e21b612e7d565b611b3d612e12565b60cf54600160a01b900460ff1660011415611b6257611b626345a9661760e01b612e7d565b611b6e83610138541190565b611b8257611b8263eb49290360e01b612e7d565b611b8e8383600161376b565b905061071b6001609755565b60606101048054610a2c906152a3565b6000611bb4612da3565b611bbc612e12565b6000611bca866001866139b6565b83519091506001600160a01b031615611c1f57600081815260ce60209081526040909120845181549286015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b600080600080600089806020019051810190611c3b9190615734565b945094509450945094506000604051806101000160405280306001600160a01b03168152602001856001600160a01b03168152602001336001600160a01b03168152602001846001600160a01b031681526020018381526020016000815260200160011515815260200160016003811115611cb857611cb86151de565b905260405163712f1bf760e11b81529091506001600160a01b0387169063e25e37ee90611ced90889085908c906004016157a9565b600060405180830381600087803b158015611d0757600080fd5b505af1158015611d1b573d6000803e3d6000fd5b50989950505050505050505050611d326001609755565b949350505050565b81611d4481612ed6565b610aeb8383613b34565b611d56612e12565b611d5f81613b46565b611d7357611d73631a7387bd60e11b612e7d565b6000611d7d612e73565b60cb549091506001600160a01b031680611dc557611d99611922565b6001600160a01b0316826001600160a01b031614611dc057611dc06282b42960e81b612e7d565b611e4d565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611df6908590600090889060040161583c565b6020604051808303816000875af1158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e39919061524b565b611e4d57611e4d63e10a050560e01b612e7d565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615c2f83398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906116a9908690600401614839565b611eba612e12565b6000611ec4612e73565b60cb549091506001600160a01b031680611ee857611ee8635f98be1560e11b612e7d565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611f17908590600090600401614aa7565b6020604051808303816000875af1158015611f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5a919061524b565b611f6e57611f6e63251c48e160e11b612e7d565b60cb80546001600160a01b0319169055604051600090600080516020615c2f833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611fc890600090600401614839565b600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b5050505050506107df6001609755565b6000612013610ca4612e73565b61202757612027633e34a41b60e21b612e7d565b61202f612e12565b60cf54600160a01b900460ff1660011415612054576120546345a9661760e01b612e7d565b61206083610138541190565b6120745761207463eb49290360e01b612e7d565b611b8e8383600161312e565b61209161208b612e73565b83613226565b6120ad5760405162461bcd60e51b8152600401610d5890615321565b6120b984848484613b62565b50505050565b6120c7612e12565b60006120d1612e73565b905060006120dd611922565b60cf549091506001600160a01b031685816121de57826001600160a01b0316846001600160a01b03161461211a5761211a6282b42960e81b612e7d565b60005b818110156121d85761216087878381811061213a5761213a615268565b9050604002016020016020810190612152919061585f565b61271061ffff909116111590565b61217457612174633daf741f60e21b612e7d565b86868281811061218657612186615268565b90506040020160ce60008b8b858181106121a2576121a2615268565b90506020020135815260200190815260200160002081816121c3919061587c565b508190506121d0816152ee565b91505061211d565b5061232c565b60005b8181101561232a576121fe87878381811061213a5761213a615268565b61221257612212633daf741f60e21b612e7d565b826001600160a01b031663ad6e40c78a8a8481811061223357612233615268565b9050602002013589898581811061224c5761224c615268565b905060400201886040518463ffffffff1660e01b815260040161227193929190615909565b602060405180830381865afa15801561228e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b2919061524b565b6122c6576122c663270e710760e21b612e7d565b8686828181106122d8576122d8615268565b90506040020160ce60008b8b858181106122f4576122f4615268565b9050602002013581526020019081526020016000208181612315919061587c565b50819050612322816152ee565b9150506121e1565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516123619493929190615936565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde9061239f908b908b908b908b90600401615936565b600060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b50505050505050506120b96001609755565b6123e7612e12565b60006123f1612e73565b60cf549091506001600160a01b03168061241557612415635f98be1560e11b612e7d565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa90612441908590600401614839565b602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612482919061524b565b6124965761249663251c48e160e11b612e7d565b60cf80546001600160a01b0319169055604051600090600080516020615c8f833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611fc890600090600401614839565b610138818154811061250157600080fd5b600091825260209091200154905081565b606061251d8261355e565b6125315761253163677510db60e11b612e7d565b600061253c83610e22565b600081815261013b6020526040902080549192509061255a906152a3565b80601f0160208091040260200160405190810160405280929190818152602001828054612586906152a3565b80156125d35780601f106125a8576101008083540402835291602001916125d3565b820191906000526020600020905b8154815290600101906020018083116125b657829003601f168201915b5050505050915050919050565b6125e8614643565b6125f482610138541190565b6126085761260863eb49290360e01b612e7d565b61071b82613080565b610136805461261f906152a3565b80601f016020809104026020016040519081016040528092919081815260200182805461264b906152a3565b80156126985780601f1061266d57610100808354040283529160200191612698565b820191906000526020600020905b81548152906001019060200180831161267b57829003601f168201915b505050505081565b6001600160a01b0391821660009081526101086020908152604080832093909416825291909152205460ff1690565b610139818154811061250157600080fd5b6126e8612e12565b60006126f2612e73565b905060006126fe611922565b90508460005b818110156128f75761273b86868381811061272157612721615268565b90506020020160208101906127369190614b8e565b613b46565b61274f5761274f631a7387bd60e11b612e7d565b600061277289898481811061276657612766615268565b90506020020135611717565b90506001600160a01b0381166127af57836001600160a01b0316856001600160a01b0316146127aa576127aa6282b42960e81b612e7d565b61286d565b806001600160a01b03166385e335b6868b8b868181106127d1576127d1615268565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612816969591909302013592506001600160a01b03169060040161583c565b6020604051808303816000875af1158015612835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612859919061524b565b61286d5761286d63e10a050560e01b612e7d565b86868381811061287f5761287f615268565b90506020020160208101906128949190614b8e565b60cc60008b8b868181106128aa576128aa615268565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806128ef906152ee565b915050612704565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e8787878760405161292d949392919061598e565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf9061296b908a908a908a908a9060040161598e565b600060405180830381600087803b15801561298557600080fd5b505af1158015612999573d6000803e3d6000fd5b505050505050506120b96001609755565b6129b2612e12565b6129c2604082016020830161585f565b61271061ffff821611156129e0576129e0633daf741f60e21b612e7d565b60006129ea612e73565b60cf549091506001600160a01b031680612a3257612a06611922565b6001600160a01b0316826001600160a01b031614612a2d57612a2d6282b42960e81b612e7d565b612ab5565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f090612a6090879086906004016159e6565b602060405180830381865afa158015612a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa1919061524b565b612ab557612ab563270e710760e21b612e7d565b8360cd612ac2828261587c565b50612ad59050604085016020860161585f565b61ffff16612ae66020860186614b8e565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c0612b396020870187614b8e565b612b49604088016020890161585f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff1660248201526044016110aa565b612b86612da3565b6001600160a01b038116612beb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d58565b6110e9816138a8565b6000612bfe612da3565b612c06612e12565b6000612c138888886139b6565b85519091506001600160a01b031615612c6857600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611afe576000808080612c7f87890189615a0c565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491612cef9188908690600401615a74565b600060405180830381600087803b158015612d0957600080fd5b505af1158015612d1d573d6000803e3d6000fd5b50505050505050509050611b0a6001609755565b6060612d3d60c9613b95565b905090565b61013a818154811061250157600080fd5b60006001600160e01b031982166380ac58cd60e01b1480612d8457506001600160e01b03198216635b5e139f60e01b145b8061071b57506301ffc9a760e01b6001600160e01b031983161461071b565b612dab612e73565b6001600160a01b0316612dbc611922565b6001600160a01b0316146107df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d58565b60026097541415612e655760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610d58565b6002609755565b6001609755565b6000612d3d613ba2565b6110e981613bc4565b612e8f8161355e565b6110e95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610d58565b610135546001600160a01b0316156110e95761013554604051633185c44d60e21b81526001600160a01b039091169063c617113490612f1b9030908590600401615537565b602060405180830381865afa158015612f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5c919061524b565b6110e9576110e9638a10919360e01b612e7d565b6000612f7b826116fb565b9050806001600160a01b0316836001600160a01b03161415612fd65760405162461bcd60e51b81526020600482015260146024820152734552433732313a20616c7265616479206f776e7360601b6044820152606401610d58565b806001600160a01b0316612fe8612e73565b6001600160a01b0316148061300457506130048161065e612e73565b6130765760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610d58565b610aeb8383613bce565b613088614643565b604051806080016040528060405180602001604052806000815250815260200161013984815481106130bc576130bc615268565b9060005260206000200154815260200161013884815481106130e0576130e0615268565b9060005260206000200154815260200161013a848154811061310457613104615268565b90600052602060002001548152509050919050565b6000610d24836001600160a01b038416613c3d565b600080610139858154811061314557613145615268565b906000526020600020015490506000610138868154811061316857613168615268565b90600052602060002001549050600061013a878154811061318b5761318b615268565b600091825260208220015491506131a28684615309565b9050838111156131bc576131bc6352df9fe560e01b612e7d565b60005b868110156131f9576131da886131d58686615309565b613c55565b6131e5600185615309565b9350806131f1816152ee565b9150506131bf565b5080610138898154811061320f5761320f615268565b600091825260209091200155979650505050505050565b600080613232836116fb565b9050806001600160a01b0316846001600160a01b03161480613259575061325981856126a0565b80611d325750836001600160a01b031661327284610aaf565b6001600160a01b031614949350505050565b826001600160a01b0316613297826116fb565b6001600160a01b0316146132e65760405162461bcd60e51b815260206004820152601660248201527522a9219b99189d10333937b6903737ba1037bbb732b960511b6044820152606401610d58565b6001600160a01b03821661333a5760405162461bcd60e51b815260206004820152601b60248201527a4552433732313a20746f20746865207a65726f206164647265737360281b6044820152606401610d58565b60008181526101076020908152604080832080546001600160a01b03191690556001600160a01b0386168352610106909152812080546001929061337f908490615af3565b90915550506001600160a01b0382166000908152610106602052604081208054600192906133ae908490615309565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b038681169182179092559151849391871691600080516020615c6f83398151915291a4610aeb838383613d66565b61013a8054604080516020808402820181019092528281526000938493849383018282801561345257602002820191906000526020600020905b81548152602001906001019080831161343e575b505083519394506000925050505b8181101561349e5782818151811061347a5761347a615268565b6020026020010151861061348c578093505b613497600182615309565b9050613460565b5091949350505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff1692820192909252829161351357506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b805160208201519093506127109061352f9061ffff1686615b0a565b6135399190615b29565b9150509250929050565b61355061010385856145bf565b5061132161010483836145bf565b600090815261010560205260409020546001600160a01b0316151590565b6000613587826116fb565b60008381526101076020908152604080832080546001600160a01b03191690556001600160a01b0384168352610106909152812080549293506001929091906135d1908490615af3565b90915550506000828152610105602052604080822080546001600160a01b0319169055518391906001600160a01b03841690600080516020615c6f833981519152908390a45050565b6001600160a01b03163b151590565b6136348a8a8a613f0d565b61363e8686613fe9565b6136478461401a565b825160005b818110156136945761368185828151811061366957613669615268565b602002602001015160c961373a90919063ffffffff16565b508061368c816152ee565b91505061364c565b5060016101375587516136af906101369060208b019061466b565b5060405162df38cb60e71b81526001600160a01b03831690636f9c6580906136db903090600401614839565b600060405180830381600087803b1580156136f557600080fd5b505af1158015613709573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b6000610d24836001600160a01b038416614063565b600061071b6001600160a01b03831663440444c560e11b6140ad565b600080835190506000610139868154811061378857613788615268565b90600052602060002001549050600061013887815481106137ab576137ab615268565b90600052602060002001549050600061013a88815481106137ce576137ce615268565b600091825260208220015491506137e58786615b0a565b6137ef9084615309565b905083811115613809576138096352df9fe560e01b612e7d565b60005b8581101561387a5760005b88811015613867576138488a838151811061383457613834615268565b602002602001015186866131d59190615309565b613853600186615309565b94508061385f816152ee565b915050613817565b5080613872816152ee565b91505061380c565b50826101388a8154811061389057613890615268565b60009182526020909120015598975050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61013580546001600160a01b0319166001600160a01b03841690811790915515611546576001600160a01b0382163b61393d5761393d6309ee12d560e01b612e7d565b604051633e9f1edf60e11b81526001600160a01b03831690637d3e3dbe9061396b9030908590600401615537565b600060405180830381600087803b15801561398557600080fd5b505af1158015613999573d6000803e3d6000fd5b505050505050565b6000610d24836001600160a01b0384166140c9565b6000826139cd576139cd630ffd11ad60e01b612e7d565b61013a8054610137805460018084019094557f1cc3277f886bc7650038e458160d07e0113c6dbe808de6ada3226131dc58025183015561013980548085019091557f22d66071756d4d57920b8322c1a903a27bd75b44065e925d5f9f1c08908d28f6018690556101388054938401815560009081527ff79a63dcec80ed75c82f36161f17b9c2f407860160383a7be0a0ee7962c527ae909301839055805491928692613a7a908490615309565b9091555050600081815261013b602090815260409091208651613a9f9288019061466b565b506001600160a01b03831615613af457613ab883613b46565b613acc57613acc631a7387bd60e11b612e7d565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b611546613b3f612e73565b83836141bc565b600061071b6001600160a01b038316633b209e2f60e11b6140ad565b613b6d848484613284565b613b7984848484614288565b6120b95760405162461bcd60e51b8152600401610d5890615b4b565b60606000610d2483614391565b6000613bad336116e7565b15613bbf575060131936013560601c90565b503390565b8060005260046000fd5b60008181526101076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613c04826116fb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60009081526001919091016020526040902054151590565b6001600160a01b038216613ca25760405162461bcd60e51b81526020600482015260146024820152734552433732313a207a65726f206164647265737360601b6044820152606401610d58565b613cab8161355e565b15613cef5760405162461bcd60e51b8152602060048201526014602482015273115490cdcc8c4e881d1bdad95b881b5a5b9d195960621b6044820152606401610d58565b6001600160a01b038216600090815261010660205260408120805460019290613d19908490615309565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839290600080516020615c6f833981519152908290a45050565b6000613d70612e73565b9050806001600160a01b0316846001600160a01b031614613d9457613d9481612ed6565b6000613d9f83611266565b90506001600160a01b03811615801590613e2857506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613de790637af46b4f60e11b9060040161539f565b602060405180830381865afa158015613e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e28919061524b565b15613ea057604051637f1eaf8560e01b81526001600160a01b0383811660048301528681166024830152858116604483015260648201859052821690637f1eaf8590608401600060405180830381600087803b158015613e8757600080fd5b505af1158015613e9b573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190613ed4908890889088906004016153b4565b600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505050505050565b600054610100900460ff16613f345760405162461bcd60e51b8152600401610d5890615b7d565b602082015161271061ffff82161115613f5757613f57633daf741f60e21b612e7d565b613f5f6143ec565b613f6761441b565b613f70846138a8565b82516001600160a01b031615613fb757825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156120b95760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166140105760405162461bcd60e51b8152600401610d5890615b7d565b611546828261444a565b600054610100900460ff166140415760405162461bcd60e51b8152600401610d5890615b7d565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600061406f8383613c3d565b6140a55750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561071b565b50600061071b565b60006140b88361449a565b8015610d245750610d2483836144cd565b600081815260018301602052604081205480156141b25760006140ed600183615af3565b855490915060009061410190600190615af3565b905081811461416657600086600001828154811061412157614121615268565b906000526020600020015490508087600001848154811061414457614144615268565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061417757614177615bc8565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061071b565b600091505061071b565b816001600160a01b0316836001600160a01b0316141561421a5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610d58565b6001600160a01b0383811660008181526101086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600061429c846001600160a01b031661361a565b1561438957836001600160a01b031663150b7a026142b8612e73565b8786866040518563ffffffff1660e01b81526004016142da9493929190615bde565b6020604051808303816000875af1925050508015614315575060408051601f3d908101601f1916820190925261431291810190615c11565b60015b61436f573d808015614343576040519150601f19603f3d011682016040523d82523d6000602084013e614348565b606091505b5080516143675760405162461bcd60e51b8152600401610d5890615b4b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d32565b506001611d32565b606081600001805480602002602001604051908101604052809291908181526020018280548015610eff57602002820191906000526020600020905b8154815260200190600101908083116143cd5750505050509050919050565b600054610100900460ff166144135760405162461bcd60e51b8152600401610d5890615b7d565b6107df614561565b600054610100900460ff166144425760405162461bcd60e51b8152600401610d5890615b7d565b6107df614598565b600054610100900460ff166144715760405162461bcd60e51b8152600401610d5890615b7d565b81516144859061010390602085019061466b565b508051610aeb9061010490602084019061466b565b60006144ad826301ffc9a760e01b6144cd565b801561071b57506144c6826001600160e01b03196144cd565b1592915050565b6000806301ffc9a760e01b836040516024016144e9919061539f565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d9150600051905082801561454a575060208210155b80156145565750600081115b979650505050505050565b600054610100900460ff166145885760405162461bcd60e51b8152600401610d5890615b7d565b6107df614593612e73565b6138a8565b600054610100900460ff16612e6c5760405162461bcd60e51b8152600401610d5890615b7d565b8280546145cb906152a3565b90600052602060002090601f0160209004810192826145ed5760008555614633565b82601f106146065782800160ff19823516178555614633565b82800160010185558215614633579182015b82811115614633578235825591602001919060010190614618565b5061463f9291506146df565b5090565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b828054614677906152a3565b90600052602060002090601f0160209004810192826146995760008555614633565b82601f106146b257805160ff1916838001178555614633565b82800160010185558215614633579182015b828111156146335782518255916020019190600101906146c4565b5b8082111561463f57600081556001016146e0565b6001600160e01b0319811681146110e957600080fd5b60006020828403121561471c57600080fd5b8135610d24816146f4565b60008083601f84011261473957600080fd5b5081356001600160401b0381111561475057600080fd5b602083019150836020828501011115610c3c57600080fd5b60008060006040848603121561477d57600080fd5b8335925060208401356001600160401b0381111561479a57600080fd5b6147a686828701614727565b9497909650939450505050565b6000815180845260005b818110156147d9576020818501810151868301820152016147bd565b818111156147eb576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610d2460208301846147b3565b60006020828403121561482557600080fd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146110e957600080fd5b6000806040838503121561487557600080fd5b82356148808161484d565b946020939093013593505050565b60008083601f8401126148a057600080fd5b5081356001600160401b038111156148b757600080fd5b6020830191508360208260051b8501011115610c3c57600080fd5b600080602083850312156148e557600080fd5b82356001600160401b038111156148fb57600080fd5b6149078582860161488e565b90969095509350505050565b600081516080845261492860808501826147b3565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561499a5782840389526149888483516147b3565b98850198935090840190600101614970565b5091979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b838110156149fe57605f198887030185526149ec868351614913565b955093820193908201906001016149d0565b505085840381870152505050614a148185614952565b95945050505050565b600080600060608486031215614a3257600080fd5b833592506020840135614a448161484d565b929592945050506040919091013590565b600080600060608486031215614a6a57600080fd5b8335614a758161484d565b92506020840135614a448161484d565b60008060408385031215614a9857600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614ad957600080fd5b86356001600160401b0380821115614af057600080fd5b614afc8a838b01614727565b90985096506020890135915080821115614b1557600080fd5b614b218a838b01614727565b90965094506040890135915080821115614b3a57600080fd5b50614b4789828a01614727565b979a9699509497509295939492505050565b60008060208385031215614b6c57600080fd5b82356001600160401b03811115614b8257600080fd5b61490785828601614727565b600060208284031215614ba057600080fd5b8135610d248161484d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614be957614be9614bab565b604052919050565b600082601f830112614c0257600080fd5b813560206001600160401b03821115614c1d57614c1d614bab565b8160051b614c2c828201614bc1565b9283528481018201928281019087851115614c4657600080fd5b83870192505b84831015614556578235614c5f8161484d565b82529183019190830190614c4c565b600080600060608486031215614c8357600080fd5b8335925060208401356001600160401b03811115614ca057600080fd5b614cac86828701614bf1565b925050604084013590509250925092565b600081518084526020808501945080840160005b83811015614ced57815187529582019590820190600101614cd1565b509495945050505050565b602081526000610d246020830184614cbd565b60008060408385031215614d1e57600080fd5b8235614d298161484d565b91506020830135614d398161484d565b809150509250929050565b600082601f830112614d5557600080fd5b81356001600160401b03811115614d6e57614d6e614bab565b614d81601f8201601f1916602001614bc1565b818152846020838601011115614d9657600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff811681146110e957600080fd5b600060408284031215614dd557600080fd5b604080519081016001600160401b0381118282101715614df757614df7614bab565b6040529050808235614e088161484d565b81526020830135614e1881614db3565b6020919091015292915050565b60008060008060008060c08789031215614e3e57600080fd5b86356001600160401b0380821115614e5557600080fd5b614e618a838b01614d44565b97506020890135965060408901359150614e7a8261484d565b819550614e8a8a60608b01614dc3565b945060a0890135915080821115614b3a57600080fd5b60008060408385031215614eb357600080fd5b8235915060208301356001600160401b03811115614ed057600080fd5b61353985828601614bf1565b60008060008060a08587031215614ef257600080fd5b84356001600160401b0380821115614f0957600080fd5b614f1588838901614d44565b95506020870135915080821115614f2b57600080fd5b50614f3887828801614d44565b9350506040850135614f498161484d565b9150614f588660608701614dc3565b905092959194509250565b80151581146110e957600080fd5b8035614f7c81614f63565b919050565b60008060408385031215614f9457600080fd5b8235614f9f8161484d565b91506020830135614d3981614f63565b60008060408385031215614fc257600080fd5b823591506020830135614d398161484d565b60008060008060808587031215614fea57600080fd5b8435614ff58161484d565b935060208501356150058161484d565b92506040850135915060608501356001600160401b0381111561502757600080fd5b61503387828801614d44565b91505092959194509250565b6000806000806040858703121561505557600080fd5b84356001600160401b038082111561506c57600080fd5b6150788883890161488e565b9096509450602087013591508082111561509157600080fd5b818701915087601f8301126150a557600080fd5b8135818111156150b457600080fd5b8860208260061b85010111156150c957600080fd5b95989497505060200194505050565b602081526000610d246020830184614913565b6000806000806040858703121561510157600080fd5b84356001600160401b038082111561511857600080fd5b6151248883890161488e565b9096509450602087013591508082111561513d57600080fd5b5061514a8782880161488e565b95989497509550505050565b600060408284031215610c9157600080fd5b6020808252825182820181905260009190848201906040850190845b818110156151a95783516001600160a01b031683529284019291840191600101615184565b50909695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038781168252861660208201526040810185905260a06060820181905260009061522890830185876151b5565b90506007831061523a5761523a6151de565b826080830152979650505050505050565b60006020828403121561525d57600080fd5b8151610d2481614f63565b634e487b7160e01b600052603260045260246000fd5b6040815260006152916040830185614cbd565b8281036020840152614a148185614952565b600181811c908216806152b757607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415615302576153026152d8565b5060010190565b6000821982111561531c5761531c6152d8565b500190565b6020808252601b908201527a115490cdcc8c4e8818d85b1b195c881d5b985d5d1a1bdc9a5e9959602a1b604082015260600190565b60608152600061536a60608301888a6151b5565b828103602084015261537d8187896151b5565b905082810360408401526153928185876151b5565b9998505050505050505050565b6001600160e01b031991909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8035614f7c8161484d565b600080600080600080600080610100898b03121561540057600080fd5b615409896153d8565b975060208901356001600160401b038082111561542557600080fd5b6154318c838d01614d44565b985060408b013591508082111561544757600080fd5b6154538c838d01614d44565b975060608b013591508082111561546957600080fd5b6154758c838d01614d44565b965061548360808c016153d8565b955060a08b013591508082111561549957600080fd5b506154a68b828c01614bf1565b9350506154b560c08a01614f71565b91506154c360e08a016153d8565b90509295985092959890939650565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b0383111561550657600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000611d326020830184866154ed565b6001600160a01b0392831681529116602082015260400190565b803565ffffffffffff81168114614f7c57600080fd5b60008060008060008060008060006101208a8c03121561558657600080fd5b89356155918161484d565b985060208a01356155a18161484d565b97506155af60408b01615551565b96506155bd60608b01615551565b955060808a01356001600160c01b03811681146155d957600080fd5b94506155e760a08b01615551565b93506155f560c08b01615551565b925061560360e08b01615551565b91506101008a01356156148161484d565b809150509295985092959850929598565b65ffffffffffff169052565b60006101c08201905061564582845161482c565b60208301516156576020840182615625565b50604083015161566a6040840182615625565b50606083015161567d606084018261482c565b5060808301516156906080840182615625565b5060a08301516156a360a0840182615625565b5060c08301516156b660c084018261482c565b5060e08301516156c960e0840182615625565b50610100808401516156dd82850182615625565b5050610120838101516001600160c01b0316908301526101408084015161570682850182615625565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b600080600080600060a0868803121561574c57600080fd5b85516157578161484d565b60208701516040880151919650945061576f8161484d565b60608701519093506157808161484d565b80925050608086015190509295509295909350565b600481106157a5576157a56151de565b9052565b60006101408201905084825260018060a01b038085511660208401528060208601511660408401528060408601511660608401525060608401516157f0608084018261482c565b50608084015160a083015260a084015160c083015260c084015161581860e084018215159052565b5060e084015161582c610100840182615795565b5082610120830152949350505050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60006020828403121561587157600080fd5b8135610d2481614db3565b81356158878161484d565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356158b381614db3565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b80356158e18161484d565b6001600160a01b0316825260208101356158fa81614db3565b61ffff81166020840152505050565b8381526080810161591d60208301856158d6565b6001600160a01b03929092166060919091015292915050565b6000604080835261594a81840187896154ed565b83810360208086019190915285825286910160005b868110156159815761597182846158d6565b918301919083019060010161595f565b5098975050505050505050565b6040815260006159a26040830186886154ed565b8281036020848101919091528482528591810160005b868110156159815783356159cb8161484d565b6001600160a01b0316825292820192908201906001016159b8565b606081016159f482856158d6565b6001600160a01b039290921660409190910152919050565b60008060008060808587031215615a2257600080fd5b84356001600160601b0381168114615a3957600080fd5b93506020850135615a498161484d565b92506040850135615a598161484d565b915060608501356001600160401b0381111561502757600080fd5b83516001600160a01b0390811682526020808601516001600160601b0316908301526040808601519091169082015260608085015115159082015260808085015115159082015260a0848101511515908201526000610100615ae160c08401866001600160601b03169052565b8060e0840152611b0a818401856147b3565b600082821015615b0557615b056152d8565b500390565b6000816000190483118215151615615b2457615b246152d8565b500290565b600082615b4657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526018908201527722a9219b99189d1034b73b30b634b2103932b1b2b4bb32b960411b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b0a908301846147b3565b600060208284031215615c2357600080fd5b8151610d24816146f456fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a