[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "InvalidInput", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "NotAvailable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "primeNumber", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "hide", "type": "bool" }, { "internalType": "bool", "name": "useExistingData", "type": "bool" }, { "internalType": "uint256", "name": "existingDataIndex", "type": "uint256" } ], "internalType": "struct TraitDTO[]", "name": "_traits", "type": "tuple[]" }, { "internalType": "uint256", "name": "_numberOfLayers", "type": "uint256" } ], "name": "addLayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bool", "name": "hide", "type": "bool" }, { "internalType": "bool", "name": "useExistingData", "type": "bool" }, { "internalType": "uint256", "name": "existingDataIndex", "type": "uint256" } ], "internalType": "struct TraitDTO", "name": "_trait", "type": "tuple" } ], "name": "addTrait", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "airdrop", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "address[]", "name": "to", "type": "address[]" } ], "name": "airdrop", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectorFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "didMintEnd", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" } ], "name": "getLinkedTraits", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_hash", "type": "string" } ], "name": "hashToMetadata", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_hash", "type": "string" } ], "name": "hashToSVG", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_maxSupply", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "maxPerAddress", "type": "uint256" }, { "internalType": "uint256", "name": "publicMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "mintStart", "type": "uint256" }, { "internalType": "bool", "name": "isContractSealed", "type": "bool" }, { "internalType": "string", "name": "description", "type": "string" }, { "internalType": "string", "name": "placeholderImage", "type": "string" } ], "internalType": "struct Settings", "name": "_settings", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint96", "name": "royaltyAmount", "type": "uint96" } ], "internalType": "struct RoyaltySettings", "name": "_royaltySettings", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint256", "name": "percentage", "type": "uint256" } ], "internalType": "struct WithdrawRecipient[]", "name": "_withdrawRecipients", "type": "tuple[]" }, { "components": [ { "internalType": "address", "name": "indelibleSecurity", "type": "address" }, { "internalType": "address", "name": "collectorFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "collectorFee", "type": "uint256" }, { "internalType": "address", "name": "deployer", "type": "address" }, { "internalType": "address", "name": "operatorFilter", "type": "address" }, { "internalType": "uint256", "name": "signatureLifespan", "type": "uint256" } ], "internalType": "struct FactorySettings", "name": "_factorySettings", "type": "tuple" } ], "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": [], "name": "isRevealed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "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": "payable", "type": "function" }, { "inputs": [], "name": "sealContract", "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": "uri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenHash", "type": "string" } ], "name": "setHashOverride", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256[]", "name": "traitA", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "traitB", "type": "uint256[]" } ], "internalType": "struct LinkedTraitDTO[]", "name": "_linkedTraits", "type": "tuple[]" } ], "name": "setLinkedTraits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxPerAddress", "type": "uint256" } ], "name": "setMaxPerAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mintStart", "type": "uint256" } ], "name": "setMintStart", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "placeholderImage", "type": "string" } ], "name": "setPlaceholderImage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "publicMintPrice", "type": "uint256" } ], "name": "setPublicMintPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bool", "name": "renderOffChain", "type": "bool" } ], "name": "setRenderOfTokenId", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setRevealSeed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "settings", "outputs": [ { "internalType": "uint256", "name": "maxPerAddress", "type": "uint256" }, { "internalType": "uint256", "name": "publicMintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "mintStart", "type": "uint256" }, { "internalType": "bool", "name": "isContractSealed", "type": "bool" }, { "internalType": "string", "name": "description", "type": "string" }, { "internalType": "string", "name": "placeholderImage", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" } ], "internalType": "struct Signature", "name": "signature", "type": "tuple" }, { "internalType": "uint256", "name": "_nonce", "type": "uint256" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPerAddress", "type": "uint256" }, { "internalType": "uint256", "name": "_mintPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_collectorFee", "type": "uint256" } ], "name": "signatureMint", "outputs": [], "stateMutability": "payable", "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": [], "name": "toggleWrapSVG", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenIdToHash", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenIdToSVG", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" } ], "name": "traitData", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "layerIndex", "type": "uint256" }, { "internalType": "uint256", "name": "traitIndex", "type": "uint256" } ], "name": "traitDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "mimetype", "type": "string" }, { "internalType": "uint256", "name": "occurrence", "type": "uint256" }, { "internalType": "address", "name": "dataPointer", "type": "address" }, { "internalType": "bool", "name": "hide", "type": "bool" } ], "internalType": "struct Trait", "name": "", "type": "tuple" } ], "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "messageHash", "type": "bytes32" }, { "components": [ { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" }, { "internalType": "uint8", "name": "v", "type": "uint8" } ], "internalType": "struct Signature", "name": "signature", "type": "tuple" } ], "name": "verifySignature", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "withdrawRecipients", "outputs": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint256", "name": "percentage", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
6080604052610104805460ff191660011790553480156200001f57600080fd5b506200002a62000030565b620000f2565b600054610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000f0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615b7680620001026000396000f3fe6080604052600436106102ff5760003560e01c8063715018a611610190578063bc63f02e116100dc578063dc9867ce11610095578063ea84b59b1161006f578063ea84b59b14610898578063f103eaaf146108c5578063f2fde38b146108dc578063fbba18a8146108fc57600080fd5b8063dc9867ce14610824578063e06174e414610851578063e985e9c51461087857600080fd5b8063bc63f02e14610787578063bdf7a8e61461079a578063c11feac1146107ad578063c87b56dd146107cd578063d5abeb01146107ed578063dbe9875f1461080457600080fd5b806395d89b4111610149578063b20d807f11610123578063b20d807f14610714578063b456806614610734578063b75f1aef14610754578063b88d4fde1461077457600080fd5b806395d89b41146106cc578063a0712d68146106e1578063a22cb465146106f457600080fd5b8063715018a6146106195780637960c27f1461062e5780637bddd65b1461064e578063876171dc1461066e57806389ce30741461068e5780638da5cb5b146106ae57600080fd5b80634920154b1161024f5780636352211e1161020857806369393a77116101e257806369393a77146105af5780636c0360eb146105c45780636cf02bd2146105d957806370a08231146105f957600080fd5b80636352211e1461055a57806366e338701461057a57806368bd580e1461059a57600080fd5b80634920154b146104ba5780634e07e2c8146104cf57806354214f69146104e257806355f804b3146104fa5780635d82cf6e1461051a578063621a1f741461053a57600080fd5b80631b523406116102bc5780633ccfd60b116102965780633ccfd60b1461045d57806342842e0e1461047257806344e963a514610485578063464a52de1461049a57600080fd5b80631b523406146103eb57806323b872dd1461040b5780632a55205a1461041e57600080fd5b806301ffc9a71461030457806306fdde0314610339578063081812fc1461035b578063095ea7b31461039357806309dbabca146103a857806318160ddd146103c8575b600080fd5b34801561031057600080fd5b5061032461031f366004614580565b61091c565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b5061034e61093c565b60405161033091906145ed565b34801561036757600080fd5b5061037b610376366004614600565b6109d7565b6040516001600160a01b039091168152602001610330565b6103a66103a136600461462e565b610a24565b005b3480156103b457600080fd5b5061034e6103c336600461465a565b610a3d565b3480156103d457600080fd5b506103dd610a76565b604051908152602001610330565b3480156103f757600080fd5b506103a66104063660046146bd565b610a95565b6103a6610419366004614708565b610ae1565b34801561042a57600080fd5b5061043e61043936600461465a565b610b06565b604080516001600160a01b039093168352602083019190915201610330565b34801561046957600080fd5b506103a6610bb4565b6103a6610480366004614708565b610cb2565b34801561049157600080fd5b50610324610cd7565b3480156104a657600080fd5b5061037b6104b5366004614761565b610ceb565b3480156104c657600080fd5b506103a6610dd1565b6103a66104dd36600461478e565b610dee565b3480156104ee57600080fd5b50610105541515610324565b34801561050657600080fd5b506103a66105153660046147da565b610ff6565b34801561052657600080fd5b506103a6610535366004614600565b611072565b34801561054657600080fd5b5061034e610555366004614600565b611080565b34801561056657600080fd5b5061037b610575366004614600565b611556565b34801561058657600080fd5b5061034e6105953660046148c6565b611561565b3480156105a657600080fd5b506103a66116ec565b3480156105bb57600080fd5b506103a6611729565b3480156105d057600080fd5b5061034e6117e4565b3480156105e557600080fd5b506103a66105f43660046148fa565b611873565b34801561060557600080fd5b506103dd610614366004614950565b611a7e565b34801561062557600080fd5b506103a6611ae6565b34801561063a57600080fd5b506103a6610649366004614600565b611af8565b34801561065a57600080fd5b506103a6610669366004614600565b611b2b565b34801561067a57600080fd5b5061043e610689366004614600565b611b39565b34801561069a57600080fd5b5061034e6106a93660046148c6565b611b72565b3480156106ba57600080fd5b506033546001600160a01b031661037b565b3480156106d857600080fd5b5061034e611d96565b6103a66106ef366004614600565b611dae565b34801561070057600080fd5b506103a661070f36600461497b565b611dcd565b34801561072057600080fd5b506103a661072f366004614a1c565b611de1565b34801561074057600080fd5b506103a661074f366004614b40565b6121c1565b34801561076057600080fd5b506103a661076f3660046147da565b612365565b6103a6610782366004614b75565b61237b565b6103a6610795366004614bf4565b6123a8565b6103a66107a8366004614c19565b6123c4565b3480156107b957600080fd5b5061034e6107c8366004614600565b61241a565b3480156107d957600080fd5b5061034e6107e8366004614600565b612446565b3480156107f957600080fd5b506103dd6101095481565b34801561081057600080fd5b506103a661081f366004614c57565b612649565b34801561083057600080fd5b5061084461083f36600461465a565b6126ce565b6040516103309190614c7c565b34801561085d57600080fd5b50610866612739565b60405161033096959493929190614cc0565b34801561088457600080fd5b50610324610893366004614d0c565b612875565b3480156108a457600080fd5b506108b86108b336600461465a565b6128b2565b6040516103309190614d3a565b3480156108d157600080fd5b506103dd6101035481565b3480156108e857600080fd5b506103a66108f7366004614950565b612a6d565b34801561090857600080fd5b506103a6610917366004614da8565b612ae3565b600061092782612e59565b80610936575061093682612ea7565b92915050565b6060610946612edc565b600201805461095490614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461098090614e33565b80156109cd5780601f106109a2576101008083540402835291602001916109cd565b820191906000526020600020905b8154815290600101906020018083116109b057829003601f168201915b5050505050905090565b60006109e282612f00565b6109ff576040516333d1c03960e21b815260040160405180910390fd5b610a07612edc565b60009283526006016020525060409020546001600160a01b031690565b81610a2e81612f3c565b610a388383612ff5565b505050565b600082815260fc60209081526040808320848452909152902060030154606090610a6f906001600160a01b0316613001565b9392505050565b600080610a81612edc565b60010154610a8d612edc565b540303919050565b61010d5460ff1615610aba5760405163ea8e4eb560e01b815260040160405180910390fd5b610ac261304b565b600083815260ff60205260409020610adb828483614ead565b50505050565b826001600160a01b0381163314610afb57610afb33612f3c565b610adb8484846130a5565b60008281526098602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610b7b5750604080518082019091526097546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610b9a906001600160601b031687614f82565b610ba49190614faf565b91519350909150505b9250929050565b610bbc61304b565b610bc4613298565b4780600080610bdb6033546001600160a01b031690565b6101105490915015610c955760005b61011054811015610c935760006101108281548110610c0b57610c0b614fc3565b600091825260209091206002909102015461011080546001600160a01b0390921692506127109184908110610c4257610c42614fc3565b906000526020600020906002020160010154612710610c619190614fd9565b610c6b9087614f82565b610c759190614faf565b9350610c8a81610c858688614fd9565b6132f1565b50600101610bea565b505b479350610ca281856132f1565b50505050610cb0600160c955565b565b826001600160a01b0381163314610ccc57610ccc33612f3c565b610adb84848461340a565b600061010954610ce5613425565b14905090565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008185604051602001610d3b929190614fec565b60408051601f19818403018152918152815160208301209192506001908290610d6a906060890190890161500e565b604080516000815260208181018084529490945260ff909216908201528735606082015290870135608082015260a0016020604051602081039080840390855afa158015610dbc573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b610dd961304b565b610104805460ff19811660ff90911615179055565b610df6613298565b60408051602081018790526bffffffffffffffffffffffff1930606090811b8216938301939093523390921b9091166054820152606881018590526088810184905260a8810183905260c881018290524660e88201526000906101080160408051601f198184030181528282528051602091820120610101546305b7633d60e41b855292519094506001600160a01b03909216926000928492635b7633d092600480820193918290030181865afa158015610eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed99190615031565b9050806001600160a01b0316610eef848b610ceb565b6001600160a01b031614610f165760405163ea8e4eb560e01b815260040160405180910390fd5b600034610f23868861504e565b610f2d908a614f82565b1490506000871580610f5257508789610f4533613437565b610f4f919061504e565b11155b3360009081526101006020526040812054919250908b118015610f82575043610107548c610f80919061504e565b115b9050821580610f8f575081155b80610f98575080155b15610fb65760405163b4fa3fb360e01b815260040160405180910390fd5b33600081815261010060205260409020439055610fde908b90610fd98a83614f82565b61347c565b505050505050610fee600160c955565b505050505050565b610ffe61304b565b61010861100c828483614ead565b506000611017613425565b111561106e577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c6000600161104a613425565b6110549190614fd9565b604080519283526020830191909152015b60405180910390a15b5050565b61107a61304b565b61010b55565b6060610105546000148061109a575061109882612f00565b155b156110b85760405163d9b9141960e01b815260040160405180910390fd5b600082815260ff6020526040812080546110d190614e33565b9050111561117757600082815260ff6020526040902080546110f290614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461111e90614e33565b801561116b5780601f106111405761010080835404028352916020019161116b565b820191906000526020600020905b81548152906001019060200180831161114e57829003601f168201915b50505050509050919050565b60006111a961010654600461118c9190614f82565b604080518281016060018252910181526000602090910190815290565b905060006111b684613539565b90506000610106546001600160401b038111156111d5576111d561481b565b6040519080825280602002602001820160405280156111fe578160200160208202803683370190505b5090506000610106546001600160401b0381111561121e5761121e61481b565b604051908082528060200260200182016040528015611247578160200160208202803683370190505b5090506000610109546101055461125e9190615061565b905060005b6101065481101561142c57600084828151811061128257611282614fc3565b6020026020010151905083828151811061129e5761129e614fc3565b6020026020010151151560001515036113225761010954600083815260fb6020526040812060010154909190856112d5868b61504e565b6112df919061504e565b6112e99190614f82565b6112f39190615061565b90506112ff83826135f6565b91508186848151811061131457611314614fc3565b602002602001018181525050505b600082815260fd602090815260408083208484529091529020541561142357600082815260fd6020908152604080832084845290915290208054600190811061136d5761136d614fc3565b600091825260208083209091015484835260fd825260408084208585529092529082208054919288926113a2576113a2614fc3565b9060005260206000200154815181106113bd576113bd614fc3565b602090810291909101810191909152600083815260fd8252604080822084835290925290812080546001928792916113f7576113f7614fc3565b90600052602060002001548151811061141257611412614fc3565b911515602092830291909101909101525b50600101611263565b5060005b835181101561154a57600a84828151811061144d5761144d614fc3565b6020026020010151101561148457604080518082019091526002815261030360f41b602082015261147f908790613690565b6114c9565b606484828151811061149857611498614fc3565b602002602001015110156114c9576040805180820190915260018152600360fc1b60208201526114c9908790613690565b6103e78482815181106114de576114de614fc3565b602002602001015111156115165760408051808201909152600381526239393960e81b6020820152611511908790613690565b611542565b61154261153b85838151811061152e5761152e614fc3565b6020026020010151613715565b8790613690565b600101611430565b50939695505050505050565b600061093682613759565b60408051620200608101825262020040815260006020918201908152825180840190935260018352605b60f81b918301919091526060916115a3908290613690565b6000805b610106548110156116e35760006115e86115e36115c5846003614f82565b6115d0856003614f82565b6115db90600361504e565b8991906137fe565b6138ca565b600083815260fc6020908152604080832060ff9485168085529252822060030154909350600160a01b9004909116151590036116a1578215611647576040805180820190915260018152600b60fa1b6020820152611647908590613690565b600082815260fb6020908152604080832060fc835281842085855283529281902090516116929361167b93909291016150e8565b60408051601f198184030181529190528590613690565b8215156000036116a157600192505b6001610106546116b19190614fd9565b82036116da576040805180820190915260018152605d60f81b60208201526116da908590613690565b506001016115a7565b50909392505050565b61010d5460ff16156117115760405163ea8e4eb560e01b815260040160405180910390fd5b61171961304b565b61010d805460ff19166001179055565b61173161304b565b61010554156117535760405163ea8e4eb560e01b815260040160405180910390fd5b3a434244611762600184614fd9565b40336040516020016117799695949392919061513e565b60408051601f19818403018152919052805160209091012061010555610109547f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c906000906117ca90600190614fd9565b6040805192835260208301919091520160405180910390a1565b61010880546117f290614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461181e90614e33565b801561186b5780601f106118405761010080835404028352916020019161186b565b820191906000526020600020905b81548152906001019060200180831161184e57829003601f168201915b505050505081565b61187b61304b565b61010d5460ff16156118a05760405163ea8e4eb560e01b815260040160405180910390fd5b60006118b260c0830160a0840161517d565b156118e35750600083815260fc602090815260408083208584529091529020600301546001600160a01b0316611930565b61192d6118f3606084018461519a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061398892505050565b90505b6040805160a0810190915280611946848061519a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081019061198f9085018561519a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060408085013560208301526001600160a01b038416908201526060016119f260a085016080860161517d565b15159052600085815260fc60209081526040808320878452909152902081518190611a1d90826151e0565b5060208201516001820190611a3290826151e0565b50604082015160028201556060820151600390910180546080909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550505050565b60006001600160a01b038216611aa7576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b03611ab7612edc565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611aee61304b565b610cb060006139ca565b61010d5460ff1615611b1d5760405163ea8e4eb560e01b815260040160405180910390fd5b611b2561304b565b61010c55565b611b3361304b565b61010a55565b6101108181548110611b4a57600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b604080516202006081019091526202004081526000602090910181815260609190611bb66040518060c0016040528060858152602001615a9c608591398290613690565b60005b600161010654611bc99190614fd9565b811015611c7c57611bff6115e3611be1836003614f82565b611bec846003614f82565b611bf790600361504e565b8891906137fe565b600082815260fc6020908152604080832060ff949094168084529390915290206003810154919450611c7491600190910190611c4c90611c47906001600160a01b0316613001565b613a1c565b604051602001611c5d92919061529f565b60408051601f198184030181529190528390613690565b600101611bb9565b50611cb66115e36003610106546003611c959190614f82565b611c9f9190614fd9565b61010654611cae906003614f82565b8791906137fe565b60ff169150611d6560fc6000600161010654611cd29190614fd9565b81526020019081526020016000206000848152602001908152602001600020600101611d3d611c4760fc6000600161010654611d0e9190614fd9565b8152602080820192909252604090810160009081208982529092529020600301546001600160a01b0316613001565b604051602001611d4e9291906152f9565b60408051601f198184030181529190528290613690565b611d6e81613a1c565b604051602001611d7e919061545d565b60405160208183030381529060405292505050919050565b6060611da0612edc565b600301805461095490614e33565b611db6613298565b611dc08133613a2a565b611dca600160c955565b50565b81611dd781612f3c565b610a388383613b6c565b600080516020615b2183398151915254610100900460ff16611e1657600080516020615b218339815191525460ff1615611e1a565b303b155b611e915760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b600080516020615b2183398151915254610100900460ff16158015611ecd57600080516020615b21833981519152805461ffff19166101011790555b600054610100900460ff1615808015611eed5750600054600160ff909116105b80611f075750303b158015611f07575060005460ff166001145b611f6a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611e88565b6000805460ff191660011790558015611f8d576000805461ff0019166101001790555b611f978a8a613be9565b611f9f613c27565b8661010a611fad82826154a2565b505061010d805460ff19169055610109889055611fd06040840160208501614950565b61010280546001600160a01b0319166001600160a01b03929092169190911790556040830135610103556120076020840184614950565b61010180546001600160a01b0319166001600160a01b039290921691909117905560a08301356101075560005b848110156120895761011086868381811061205157612051614fc3565b83546001810185556000948552602090942060409091029290920192600202909101905061207f8282615516565b5050600101612034565b5061209760a088018861519a565b90506000036120e3573a4342446120af600184614fd9565b40336040516020016120c69695949392919061513e565b60408051601f198184030181529190528051602090910120610105555b6121086120f36020880188614950565b6121036040890160208a0161554c565b613c56565b61211b6108f76080850160608601614950565b61215061212e60a0850160808601614950565b600061214060a0870160808801614950565b6001600160a01b03161415613d53565b8015612196576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5080156121b657600080516020615b21833981519152805461ff00191690555b505050505050505050565b6121c961304b565b61010d5460ff16156121ee5760405163ea8e4eb560e01b815260040160405180910390fd5b60005b81811015610a3857604051806040016040528084848481811061221657612216614fc3565b90506020028101906122289190615575565b612236906020810190615595565b600081811061224757612247614fc3565b90506020020135815260200184848481811061226557612265614fc3565b90506020028101906122779190615575565b612285906020810190615595565b600181811061229657612296614fc3565b9050602002013581525060fd60008585858181106122b6576122b6614fc3565b90506020028101906122c89190615575565b6122d29080615595565b60008181106122e3576122e3614fc3565b905060200201358152602001908152602001600020600085858581811061230c5761230c614fc3565b905060200281019061231e9190615575565b6123289080615595565b600181811061233957612339614fc3565b90506020020135815260200190815260200160002090600261235c92919061450a565b506001016121f1565b61236d61304b565b61010f610a38828483614ead565b836001600160a01b03811633146123955761239533612f3c565b6123a185858585613ef2565b5050505050565b6123b0613298565b6123ba8282613a2a565b61106e600160c955565b6123cc613298565b60005b8181101561240f57612407848484848181106123ed576123ed614fc3565b90506020020160208101906124029190614950565b613a2a565b6001016123cf565b50610a38600160c955565b606061010554600014612438576124336106a983611080565b610936565b61010f80546110f290614e33565b606061245182612f00565b61246e5760405163b4fa3fb360e01b815260040160405180910390fd5b60408051620200608101909152620200408152600060209091019081526124b461249661093c565b61249f85613715565b604051611d4e92919061010e906020016155de565b610105546000036124db576040516124d690611d4e9061010f90602001615666565b612619565b60006124e684611080565b9050600061010880546124f890614e33565b90501180156125155750600084815260fe602052604090205460ff165b1561254b5761254661010861252986613715565b8361253346613715565b604051602001611c5d9493929190615696565b6125fb565b6040805160208101909152600081526101045460ff16156125c257600061257183611b72565b905061259b81604051602001612587919061572e565b604051602081830303815290604052613a1c565b6040516020016125ab919061545d565b6040516020818303038152906040529150506125ce565b6125cb82611b72565b90505b6125f9816040516020016125e29190615819565b60408051601f198184030181529190528490613690565b505b61261761260782611561565b604051602001611c5d919061585c565b505b61262281613a1c565b604051602001612632919061589d565b604051602081830303815290604052915050919050565b61265282611556565b6001600160a01b0316336001600160a01b0316146126835760405163ea8e4eb560e01b815260040160405180910390fd5b600082815260fe6020908152604091829020805460ff191684151517905590518381527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79101611065565b600082815260fd6020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561272c57602002820191906000526020600020905b815481526020019060010190808311612718575b5050505050905092915050565b61010a805461010b5461010c5461010d5461010e805494959394929360ff9092169261276490614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461279090614e33565b80156127dd5780601f106127b2576101008083540402835291602001916127dd565b820191906000526020600020905b8154815290600101906020018083116127c057829003601f168201915b5050505050908060050180546127f290614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461281e90614e33565b801561286b5780601f106128405761010080835404028352916020019161286b565b820191906000526020600020905b81548152906001019060200180831161284e57829003601f168201915b5050505050905086565b600061287f612edc565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b6128ef6040518060a0016040528060608152602001606081526020016000815260200160006001600160a01b031681526020016000151581525090565b600083815260fc6020908152604080832085845290915290819020815160a0810190925280548290829061292290614e33565b80601f016020809104026020016040519081016040528092919081815260200182805461294e90614e33565b801561299b5780601f106129705761010080835404028352916020019161299b565b820191906000526020600020905b81548152906001019060200180831161297e57829003601f168201915b505050505081526020016001820180546129b490614e33565b80601f01602080910402602001604051908101604052809291908181526020018280546129e090614e33565b8015612a2d5780601f10612a0257610100808354040283529160200191612a2d565b820191906000526020600020905b815481529060010190602001808311612a1057829003601f168201915b5050509183525050600282015460208201526003909101546001600160a01b0381166040830152600160a01b900460ff1615156060909101529392505050565b612a7561304b565b6001600160a01b038116612ada5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611e88565b611dca816139ca565b612aeb61304b565b61010d5460ff1615612b105760405163ea8e4eb560e01b815260040160405180910390fd5b604051806060016040528087878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505050602080830188905260409283018690528a825260fb90522081518190612b7990826151e0565b506020820151600182015560409091015160029091015561010681905560005b82811015612e4f576000848483818110612bb557612bb5614fc3565b9050602002810190612bc791906158e2565b612bd89060c081019060a00161517d565b15612c3857600089815260fc6020526040812090868685818110612bfe57612bfe614fc3565b9050602002810190612c1091906158e2565b60c0013581526020810191909152604001600020600301546001600160a01b03169050612c70565b612c6d858584818110612c4d57612c4d614fc3565b9050602002810190612c5f91906158e2565b6118f390606081019061519a565b90505b6040518060a00160405280868685818110612c8d57612c8d614fc3565b9050602002810190612c9f91906158e2565b612ca9908061519a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110612cf557612cf5614fc3565b9050602002810190612d0791906158e2565b612d1590602081019061519a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110612d6157612d61614fc3565b9050602002810190612d7391906158e2565b604001358152602001826001600160a01b03168152602001868685818110612d9d57612d9d614fc3565b9050602002810190612daf91906158e2565b612dc09060a081019060800161517d565b1515905260008a815260fc60209081526040808320868452909152902081518190612deb90826151e0565b5060208201516001820190612e0090826151e0565b50604082015160028201556060820151600390910180546080909301511515600160a01b026001600160a81b03199093166001600160a01b039092169190911791909117905550600101612b99565b5050505050505050565b60006301ffc9a760e01b6001600160e01b031983161480612e8a57506380ac58cd60e01b6001600160e01b03198316145b806109365750506001600160e01b031916635b5e139f60e01b1490565b60006001600160e01b0319821663152a902d60e11b148061093657506301ffc9a760e01b6001600160e01b0319831614610936565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b6000612f0a612edc565b54821080156109365750600160e01b612f21612edc565b60008481526004919091016020526040902054161592915050565b6daaeb6d7670e522a718067333cd4e3b15611dca57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015612fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcd91906158f8565b611dca57604051633b79c77360e21b81526001600160a01b0382166004820152602401611e88565b61106e82826001613f36565b6060813b80613018576311052bb46000526004601cfd5b600181039050604051915061ffe0603f820116820160405280825260008160208401015280600160208401853c50919050565b6033546001600160a01b03163314610cb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611e88565b60006130b082613759565b9050836001600160a01b0316816001600160a01b0316146130e35760405162a1148160e81b815260040160405180910390fd5b6000806130ef84613feb565b9150915061311481876130ff3390565b6001600160a01b039081169116811491141790565b61313f576131228633612875565b61313f57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661316657604051633a954ecd60e21b815260040160405180910390fd5b801561317157600082555b613179612edc565b6001600160a01b03871660009081526005919091016020526040902080546000190190556131a5612edc565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176131dc612edc565b60008681526004919091016020526040812091909155600160e11b84169003613252576001840161320b612edc565b6000828152600491909101602052604081205490036132505761322c612edc565b548114613250578361323c612edc565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fee565b600260c954036132ea5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611e88565b600260c955565b804710156133415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611e88565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461338e576040519150601f19603f3d011682016040523d82523d6000602084013e613393565b606091505b5050905080610a385760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611e88565b610a388383836040518060200160405280600081525061237b565b600080613430612edc565b5403919050565b60006001600160401b03604061344b612edc565b6005016000856001600160a01b03166001600160a01b0316815260200190815260200160002054901c169050919050565b600183108061349f57506101095483613493613425565b61349d919061504e565b115b156134bd5760405163b4fa3fb360e01b815260040160405180910390fd5b3332146134dd5760405163ea8e4eb560e01b815260040160405180910390fd5b60006134ea601485614faf565b905060006134f9601486615061565b905060005b8281101561351957613511856014614013565b6001016134fe565b50801561352a5761352a8482614013565b82156123a1576123a18361414e565b600080610109546001600160401b038111156135575761355761481b565b604051908082528060200260200182016040528015613580578160200160208202803683370190505b50905060005b610109548110156135b757808282815181106135a4576135a4614fc3565b6020908102919091010152600101613586565b5060408051602081019091526101055481526135d381836141c3565b8184815181106135e5576135e5614fc3565b602002602001015192505050919050565b600080805b600085815260fb602052604090206002015481101561366d57600085815260fc602090815260408083208484529091529020600201548285108015906136495750613646818461504e565b85105b15613658575091506109369050565b613662818461504e565b9250506001016135fb565b5060405162461bcd60e51b81526020600482015260006024820152604401611e88565b601f1982015182518251603f199092019182906136ad908361504e565b111561370b5760405162461bcd60e51b815260206004820152602760248201527f44796e616d69634275666665723a20417070656e64696e67206f7574206f66206044820152663137bab732399760c91b6064820152608401611e88565b610adb8484614247565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061372f5750819003601f19909101908152919050565b6000613763612edc565b600083815260049190910160205260408120549150600160e01b821690036137e557806000036137e057613795612edc565b5482106137b557604051636f96cda160e11b815260040160405180910390fd5b6137bd612edc565b6000199092016000818152600493909301602052604090922054905080156137b5575b919050565b604051636f96cda160e11b815260040160405180910390fd5b606083600061380d8585614fd9565b6001600160401b038111156138245761382461481b565b6040519080825280601f01601f19166020018201604052801561384e576020820181803683370190505b509050845b848110156138c05782818151811061386d5761386d614fc3565b01602001516001600160f81b031916826138878884614fd9565b8151811061389757613897614fc3565b60200101906001600160f81b031916908160001a905350806138b881615915565b915050613853565b5095945050505050565b60008181805b82518160ff161015613980576030838260ff16815181106138f3576138f3614fc3565b016020015160f81c1080159061392657506039838260ff168151811061391b5761391b614fc3565b016020015160f81c11155b1561396e57613936600a8361592e565b91506030838260ff168151811061394f5761394f614fc3565b0160200151613961919060f81c615951565b61396b908361596a565b91505b8061397881615983565b9150506138d0565b509392505050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f0925050816139c45763301164256000526004601cfd5b90915290565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606109368260008061427d565b6033546001600160a01b03163314801590613a53575061010c541580613a53575061010c544211155b15613a715760405163d9b9141960e01b815260040160405180910390fd5b6000613a856033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614613ac0576101035461010b543491613ab09161504e565b613aba9085614f82565b14613ad2565b346101035484613ad09190614f82565b145b61010a549091506000901580613afe575061010a5484613af185613437565b613afb919061504e565b11155b9050613b126033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015613b31575080155b80613b3a575081155b15613b585760405163b4fa3fb360e01b815260040160405180910390fd5b610adb84846101035487610fd99190614f82565b80613b75612edc565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600080516020615b2183398151915254610100900460ff16613c1d5760405162461bcd60e51b8152600401611e88906159a2565b61106e828261437b565b600054610100900460ff16613c4e5760405162461bcd60e51b8152600401611e88906159f6565b610cb06143ee565b6127106001600160601b0382161115613cc45760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401611e88565b6001600160a01b038216613d1a5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401611e88565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217609755565b600054610100900460ff16613d7a5760405162461bcd60e51b8152600401611e88906159f6565b6daaeb6d7670e522a718067333cd4e3b1561106e5760405163c3c5a54760e01b81523060048201526daaeb6d7670e522a718067333cd4e9063c3c5a547906024016020604051808303816000875af1158015613dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfe91906158f8565b61106e578015613e7257604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015613e5e57600080fd5b505af1158015610fee573d6000803e3d6000fd5b6001600160a01b03821615613ec15760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401613e44565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401613e44565b613efd848484610ae1565b6001600160a01b0383163b15610adb57613f198484848461441e565b610adb576040516368d2bf6b60e11b815260040160405180910390fd5b6000613f4183611556565b90508115613f8057336001600160a01b03821614613f8057613f638133612875565b613f80576040516367d9dca160e11b815260040160405180910390fd5b83613f89612edc565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000806000613ff8612edc565b60009485526006016020525050604090912080549092909150565b600061401d612edc565b54905060008290036140425760405163b562e8dd60e01b815260040160405180910390fd5b680100000000000000018202614056612edc565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b1717614091612edc565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461411b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016140e3565b508160000361413c57604051622e076360e81b815260040160405180910390fd5b80614145612edc565b5550610a389050565b610102546040516000916001600160a01b03169083908381818185875af1925050503d806000811461419c576040519150601f19603f3d011682016040523d82523d6000602084013e6141a1565b606091505b505090508061106e5760405163ea8e4eb560e01b815260040160405180910390fd5b80516000196fffffffffffffffffffffffffffffffff82156123a1576020840193505b6020852080865282840193608082901c0660051b8501846142085750506123a1565b600585811b8701805183519091529091528385019482841606901b8501846142315750506123a1565b600585901b8601805182519091529052506141e6565b8051602082019150808201602084510184015b8184101561427257835181526020938401930161425a565b505082510190915250565b606083518015613980576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526102308515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f03603f52602083018181015b6003880197508751603f8160121c16518353603f81600c1c16516001840153603f8160061c16516002840153603f8116516003840153506004820191508082106142ed576003840686801561434d57600182148215150185038752614365565b603d821515850353603d6001831460011b8503538487525b5050601f01601f19166040525050509392505050565b600080516020615b2183398151915254610100900460ff166143af5760405162461bcd60e51b8152600401611e88906159a2565b816143b8612edc565b600201906143c690826151e0565b50806143d0612edc565b600301906143de90826151e0565b5060006143e9612edc565b555050565b600054610100900460ff166144155760405162461bcd60e51b8152600401611e88906159f6565b610cb0336139ca565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290614453903390899088908890600401615a41565b6020604051808303816000875af192505050801561448e575060408051601f3d908101601f1916820190925261448b91810190615a7e565b60015b6144ec573d8080156144bc576040519150601f19603f3d011682016040523d82523d6000602084013e6144c1565b606091505b5080516000036144e4576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b828054828255906000526020600020908101928215614545579160200282015b8281111561454557825182559160200191906001019061452a565b50614551929150614555565b5090565b5b808211156145515760008155600101614556565b6001600160e01b031981168114611dca57600080fd5b60006020828403121561459257600080fd5b8135610a6f8161456a565b60005b838110156145b85781810151838201526020016145a0565b50506000910152565b600081518084526145d981602086016020860161459d565b601f01601f19169290920160200192915050565b602081526000610a6f60208301846145c1565b60006020828403121561461257600080fd5b5035919050565b6001600160a01b0381168114611dca57600080fd5b6000806040838503121561464157600080fd5b823561464c81614619565b946020939093013593505050565b6000806040838503121561466d57600080fd5b50508035926020909101359150565b60008083601f84011261468e57600080fd5b5081356001600160401b038111156146a557600080fd5b602083019150836020828501011115610bad57600080fd5b6000806000604084860312156146d257600080fd5b8335925060208401356001600160401b038111156146ef57600080fd5b6146fb8682870161467c565b9497909650939450505050565b60008060006060848603121561471d57600080fd5b833561472881614619565b9250602084013561473881614619565b929592945050506040919091013590565b60006060828403121561475b57600080fd5b50919050565b6000806080838503121561477457600080fd5b823591506147858460208501614749565b90509250929050565b60008060008060008061010087890312156147a857600080fd5b6147b28888614749565b986060880135985060808801359760a0810135975060c0810135965060e00135945092505050565b600080602083850312156147ed57600080fd5b82356001600160401b0381111561480357600080fd5b61480f8582860161467c565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561484b5761484b61481b565b604051601f8501601f19908116603f011681019082821181831017156148735761487361481b565b8160405280935085815286868601111561488c57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126148b757600080fd5b610a6f83833560208501614831565b6000602082840312156148d857600080fd5b81356001600160401b038111156148ee57600080fd5b614502848285016148a6565b60008060006060848603121561490f57600080fd5b833592506020840135915060408401356001600160401b0381111561493357600080fd5b840160e0818703121561494557600080fd5b809150509250925092565b60006020828403121561496257600080fd5b8135610a6f81614619565b8015158114611dca57600080fd5b6000806040838503121561498e57600080fd5b823561499981614619565b915060208301356149a98161496d565b809150509250929050565b600060c0828403121561475b57600080fd5b60006040828403121561475b57600080fd5b60008083601f8401126149ea57600080fd5b5081356001600160401b03811115614a0157600080fd5b6020830191508360208260061b8501011115610bad57600080fd5b6000806000806000806000806101a0898b031215614a3957600080fd5b88356001600160401b0380821115614a5057600080fd5b614a5c8c838d016148a6565b995060208b0135915080821115614a7257600080fd5b614a7e8c838d016148a6565b985060408b0135975060608b0135915080821115614a9b57600080fd5b614aa78c838d016149b4565b9650614ab68c60808d016149c6565b955060c08b0135915080821115614acc57600080fd5b50614ad98b828c016149d8565b9094509250614aed90508a60e08b016149b4565b90509295985092959890939650565b60008083601f840112614b0e57600080fd5b5081356001600160401b03811115614b2557600080fd5b6020830191508360208260051b8501011115610bad57600080fd5b60008060208385031215614b5357600080fd5b82356001600160401b03811115614b6957600080fd5b61480f85828601614afc565b60008060008060808587031215614b8b57600080fd5b8435614b9681614619565b93506020850135614ba681614619565b92506040850135915060608501356001600160401b03811115614bc857600080fd5b8501601f81018713614bd957600080fd5b614be887823560208401614831565b91505092959194509250565b60008060408385031215614c0757600080fd5b8235915060208301356149a981614619565b600080600060408486031215614c2e57600080fd5b8335925060208401356001600160401b03811115614c4b57600080fd5b6146fb86828701614afc565b60008060408385031215614c6a57600080fd5b8235915060208301356149a98161496d565b6020808252825182820181905260009190848201906040850190845b81811015614cb457835183529284019291840191600101614c98565b50909695505050505050565b868152856020820152846040820152831515606082015260c060808201526000614ced60c08301856145c1565b82810360a0840152614cff81856145c1565b9998505050505050505050565b60008060408385031215614d1f57600080fd5b8235614d2a81614619565b915060208301356149a981614619565b602081526000825160a06020840152614d5660c08401826145c1565b90506020840151601f19848303016040850152614d7382826145c1565b9150506040840151606084015260018060a01b0360608501511660808401526080840151151560a08401528091505092915050565b600080600080600080600060a0888a031215614dc357600080fd5b8735965060208801356001600160401b0380821115614de157600080fd5b614ded8b838c0161467c565b909850965060408a0135955060608a0135915080821115614e0d57600080fd5b50614e1a8a828b01614afc565b989b979a50959894979596608090950135949350505050565b600181811c90821680614e4757607f821691505b60208210810361475b57634e487b7160e01b600052602260045260246000fd5b601f821115610a3857600081815260208120601f850160051c81016020861015614e8e5750805b601f850160051c820191505b81811015610fee57828155600101614e9a565b6001600160401b03831115614ec457614ec461481b565b614ed883614ed28354614e33565b83614e67565b6000601f841160018114614f0c5760008515614ef45750838201355b600019600387901b1c1916600186901b1783556123a1565b600083815260209020601f19861690835b82811015614f3d5786850135825560209485019460019092019101614f1d565b5086821015614f5a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761093657610936614f6c565b634e487b7160e01b600052601260045260246000fd5b600082614fbe57614fbe614f99565b500490565b634e487b7160e01b600052603260045260246000fd5b8181038181111561093657610936614f6c565b60008351614ffe81846020880161459d565b9190910191825250602001919050565b60006020828403121561502057600080fd5b813560ff81168114610a6f57600080fd5b60006020828403121561504357600080fd5b8151610a6f81614619565b8082018082111561093657610936614f6c565b60008261507057615070614f99565b500690565b6000815461508281614e33565b6001828116801561509a57600181146150af576150de565b60ff19841687528215158302870194506150de565b8560005260208060002060005b858110156150d55781548a8201529084019082016150bc565b50505082870194505b5050505092915050565b6e3d913a3930b4ba2fba3cb832911d1160891b8152600061510c600f830185615075565b6a1116113b30b63ab2911d1160a91b815261512a600b820185615075565b61227d60f01b815260020195945050505050565b9586526020860194909452604085019290925260608085019190915260808401919091521b6bffffffffffffffffffffffff191660a082015260b40190565b60006020828403121561518f57600080fd5b8135610a6f8161496d565b6000808335601e198436030181126151b157600080fd5b8301803591506001600160401b038211156151cb57600080fd5b602001915036819003821315610bad57600080fd5b81516001600160401b038111156151f9576151f961481b565b61520d816152078454614e33565b84614e67565b602080601f831160018114615242576000841561522a5750858301515b600019600386901b1c1916600185901b178555610fee565b600085815260208120601f198616915b8281101561527157888601518255948401946001909101908401615252565b508582101561528f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b643230ba309d60d91b815260006152b96005830185615075565b670ed8985cd94d8d0b60c21b815283516152da81600884016020880161459d565b6505258eae4d8560d31b60089290910191820152600e01949350505050565b643230ba309d60d91b815260006153136005830185615075565b670ed8985cd94d8d0b60c21b8152835161533481600884016020880161459d565b7f293b6261636b67726f756e642d7265706561743a6e6f2d7265706561743b6261600892909101918201527f636b67726f756e642d73697a653a636f6e7461696e3b6261636b67726f756e6460288201527f2d706f736974696f6e3a63656e7465723b696d6167652d72656e646572696e6760488201527f3a2d7765626b69742d6f7074696d697a652d636f6e74726173743b2d6d732d6960688201527f6e746572706f6c6174696f6e2d6d6f64653a6e6561726573742d6e656967686260888201527f6f723b696d6167652d72656e646572696e673a2d6d6f7a2d63726973702d656460a88201527f6765733b696d6167652d72656e646572696e673a706978656c617465643b223e60c8820152651e17b9bb339f60d11b60e882015260ee01949350505050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081526000825161549581601a85016020870161459d565b91909101601a0192915050565b8135815560208201356001820155604082013560028201556003810160608301356154cc8161496d565b815490151560ff1660ff19919091161790556154eb608083018361519a565b6154f9818360048601614ead565b505061550860a083018361519a565b610adb818360058601614ead565b813561552181614619565b81546001600160a01b0319166001600160a01b03919091161781556020919091013560019190910155565b60006020828403121561555e57600080fd5b81356001600160601b0381168114610a6f57600080fd5b60008235603e1983360301811261558b57600080fd5b9190910192915050565b6000808335601e198436030181126155ac57600080fd5b8301803591506001600160401b038211156155c657600080fd5b6020019150600581901b3603821315610bad57600080fd5b683d913730b6b2911d1160b91b8152835160009061560381600985016020890161459d565b61202360f01b600991840191820152845161562581600b84016020890161459d565b701116113232b9b1b934b83a34b7b7111d1160791b600b9290910191820152615651601c820185615075565b61088b60f21b81526002019695505050505050565b681134b6b0b3b2911d1160b91b815260006156846009830184615075565b61227d60f01b81526002019392505050565b681134b6b0b3b2911d1160b91b815260006156b46009830187615075565b85516156c4818360208a0161459d565b643f646e613d60d81b910190815284516156e581600584016020890161459d565b6a266e6574776f726b49643d60a81b60059290910191820152835161571181601084016020880161459d565b61088b60f21b601092909101918201526012019695505050505050565b7f3c7376672077696474683d223130302522206865696768743d2231303025222081527f76696577426f783d2230203020313230302031323030222076657273696f6e3d60208201527f22312e322220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f3260408201527f3030302f737667223e3c696d6167652077696474683d2231323030222068656960608201527033b43a1e91189918181110343932b31e9160791b6080820152600082516157f281609185016020870161459d565b6f111f1e17b4b6b0b3b29f1e17b9bb339f60811b609193909101928301525060a101919050565b6d1134b6b0b3b2afb230ba30911d1160911b8152815160009061584381600e85016020870161459d565b61088b60f21b600e939091019283015250601001919050565b6c1130ba3a3934b13aba32b9911d60991b8152815160009061588581600d85016020870161459d565b607d60f81b600d939091019283015250600e01919050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516158d581601d85016020870161459d565b91909101601d0192915050565b6000823560de1983360301811261558b57600080fd5b60006020828403121561590a57600080fd5b8151610a6f8161496d565b60006001820161592757615927614f6c565b5060010190565b60ff818116838216029081169081811461594a5761594a614f6c565b5092915050565b60ff828116828216039081111561093657610936614f6c565b60ff818116838216019081111561093657610936614f6c565b600060ff821660ff810361599957615999614f6c565b60010192915050565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615a74908301846145c1565b9695505050505050565b600060208284031215615a9057600080fd5b8151610a6f8161456a56fe3c7376672077696474683d223132303022206865696768743d2231323030222076696577426f783d2230203020313230302031323030222076657273696f6e3d22312e322220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207374796c653d226261636b67726f756e642d696d6167653a75726c28ee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa2646970667358221220e582770ea9b6463be5581bf41d948d12b08b2e6c2919b93760dba2f58c737eb164736f6c63430008110033