[ { "inputs": [ { "internalType": "bool", "name": "disable", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ArrayLengthMismatch", "type": "error" }, { "inputs": [], "name": "BatchSizeTooSmall", "type": "error" }, { "inputs": [], "name": "BurnZeroTokens", "type": "error" }, { "inputs": [], "name": "CallerNotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "CallerNotTokenOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "EmptyTokenURI", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MaxRoyaltyError", "type": "error" }, { "inputs": [], "name": "MintToZeroAddresses", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotRoleOrOwner", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotSpecifiedRole", "type": "error" }, { "inputs": [], "name": "OperatorBlocked", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "StoryNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "StringsInsufficientHexLength", "type": "error" }, { "inputs": [], "name": "TokenDoesntExist", "type": "error" }, { "inputs": [], "name": "ZeroAddressError", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" } ], "name": "AllRolesRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevBlockListRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "BlockListRegistryUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CollectionStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CreatorStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "DefaultRoyaltyUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevNftDelegationRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newNftDelegationRegistry", "type": "address" } ], "name": "NftDelegationRegistryUpdate", "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": "user", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "approved", "type": "bool" }, { "indexed": false, "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "RoleChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "collectorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "collectorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "Story", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "StoryStatusUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "TokenRoyaltyOverride", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "APPROVED_MINT_CONTRACT", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BASIS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCollectionStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCreatorStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "newUris", "type": "string[]" }, { "internalType": "address[][]", "name": "addresses", "type": "address[][]" }, { "internalType": "uint256[][]", "name": "amounts", "type": "uint256[][]" }, { "internalType": "address[]", "name": "royaltyAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "royaltyPercents", "type": "uint256[]" } ], "name": "batchCreateToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "newUris", "type": "string[]" }, { "internalType": "address[][]", "name": "addresses", "type": "address[][]" }, { "internalType": "uint256[][]", "name": "amounts", "type": "uint256[][]" } ], "name": "batchCreateToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "blocklistRegistry", "outputs": [ { "internalType": "contract IBlockListRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newUri", "type": "string" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint256", "name": "royaltyPercent", "type": "uint256" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newUri", "type": "string" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "externalMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyRecipientAndPercentage", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMembers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenDetails", "outputs": [ { "components": [ { "internalType": "bool", "name": "created", "type": "bool" }, { "internalType": "string", "name": "uri", "type": "string" } ], "internalType": "struct IERC1155TL.Token", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "potentialRoleMember", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "string", "name": "personalization", "type": "string" }, { "internalType": "address", "name": "defaultRoyaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "defaultRoyaltyPercentage", "type": "uint256" }, { "internalType": "address", "name": "initOwner", "type": "address" }, { "internalType": "address[]", "name": "admins", "type": "address[]" }, { "internalType": "bool", "name": "enableStory", "type": "bool" }, { "internalType": "address", "name": "initBlockListRegistry", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "mintToken", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeAllRoles", "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": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "minters", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setApprovedMintContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "setBlockListRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "setNftDelegationRegistry", "outputs": [], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address[]", "name": "roleMembers", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setStoryStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "newUri", "type": "string" } ], "name": "setTokenUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "storyEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "tlNftDelegationRegistry", "outputs": [ { "internalType": "contract ITLNftDelegationRegistry", "name": "", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005a1138038062005a11833981016040819052620000349162000100565b80156200004557620000456200004c565b506200012b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200009d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000fd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011357600080fd5b815180151581146200012457600080fd5b9392505050565b6158d6806200013b6000396000f3fe608060405234801561001057600080fd5b50600436106103145760003560e01c806357f7789e116101a75780639c22fcbb116100ee578063d8c3a27411610097578063f242432a11610071578063f242432a146107d9578063f2fde38b146107ec578063ffa1ad74146107ff57600080fd5b8063d8c3a27414610758578063d8d045b41461076b578063e985e9c51461077e57600080fd5b8063bbe4e87b116100c8578063bbe4e87b1461071e578063c1e0372814610725578063d4bf502a1461074557600080fd5b80639c22fcbb146106dd578063a22cb465146106eb578063a3246ad3146106fe57600080fd5b80637e6cc5421161015057806391d148541161012a57806391d148541461063f57806395d89b41146106c25780639713c807146106ca57600080fd5b80637e6cc542146105a75780638bb9c5bf146105fc5780638da5cb5b1461060f57600080fd5b8063715018a611610181578063715018a61461056557806375b238fc1461056d5780637c5d28bd1461059457600080fd5b806357f7789e1461052c5780635b23e3ce1461053f578063665794021461055257600080fd5b80632d28c08b1161026b578063485d3c071161021457806351dc02f2116101ee57806351dc02f2146104fd578063528cfa981461051057806356000f771461051957600080fd5b8063485d3c07146104bd5780634a597065146104d05780634e1273f4146104dd57600080fd5b806333aa4fb31161024557806333aa4fb31461048f5780633db0f8ab1461049757806346317db7146104aa57600080fd5b80632d28c08b146104565780632eb2c2d614610469578063319210231461047c57600080fd5b806318160ddd116102cd578063249fde3b116102a7578063249fde3b146103fe57806329471dc2146104115780632a55205a1461042457600080fd5b806318160ddd146103ba5780631a006e8a146103c25780631ff7f0bc146103d757600080fd5b806306fdde03116102fe57806306fdde03146103625780630e89341c146103775780631145a2431461038a57600080fd5b8062fdd58e1461031957806301ffc9a71461033f575b600080fd5b61032c6103273660046144e5565b61083b565b6040519081526020015b60405180910390f35b61035261034d36600461453d565b610884565b6040519015158152602001610336565b61036a6109d3565b60405161033691906145be565b61036a6103853660046145d1565b610a61565b6003546103a29061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610336565b60005461032c565b6103d56103d03660046145ea565b610b4d565b005b61032c7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af581565b6103d561040c36600461464a565b610ccf565b6103d561041f366004614706565b610ded565b610437610432366004614772565b610f41565b604080516001600160a01b039093168352602083019190915201610336565b6103d5610464366004614794565b61101c565b6103d56104773660046149e7565b6111e1565b6103d561048a366004614a91565b611297565b6103d56115b7565b6103d56104a5366004614b82565b611621565b6103d56104b8366004614bc0565b611764565b6103d56104cb366004614c5a565b6119d4565b6003546103529060ff1681565b6104f06104eb366004614cfd565b611b7e565b6040516103369190614d9d565b6103d561050b366004614dc9565b611c64565b61032c61271081565b6103d5610527366004614e20565b611dd2565b6103d561053a366004614e89565b611f70565b6103d561054d366004614e20565b612159565b6103d5610560366004614ed5565b612224565b6103d5612522565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103d56105a2366004614fcf565b612536565b6104377fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701546001600160a01b0390911691565b6103d561060a3660046145d1565b61269d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103a2565b61035261064d366004614fec565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083209483529381528382206001600160a01b0393909316825291909152205460ff1690565b61036a612703565b6103d56106d8366004615018565b612710565b6103d56103143660046145ea565b6103d56106f936600461504d565b612824565b61071161070c3660046145d1565b612874565b6040516103369190615084565b60006103a2565b6107386107333660046145d1565b6128e3565b60405161033691906150d1565b6103d56107533660046150f8565b6129b8565b6103d561076636600461464a565b6129d0565b6103d56107793660046144e5565b612a92565b61035261078c366004615148565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b6103d56107e7366004615172565b612ba5565b6103d56107fa3660046145ea565b612c5b565b61036a6040518060400160405280600581526020017f332e302e3100000000000000000000000000000000000000000000000000000081525081565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b600061088f82612cb2565b8061089e575061089e82612d95565b806108ea57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1c8e024d00000000000000000000000000000000000000000000000000000000145b8061093657507fffffffff0000000000000000000000000000000000000000000000000000000082167f2464f17b00000000000000000000000000000000000000000000000000000000145b8061098257507f0d23ecb9000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061087e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f452d5a4a000000000000000000000000000000000000000000000000000000001492915050565b600180546109e0906151d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c906151d7565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b505050505081565b60008181526004602052604090205460609060ff16610aac576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526004602052604090206001018054610ac8906151d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610af4906151d7565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b50505050509050919050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610c1c575033610c107f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610c5b576040517f76c17431000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b600380546001600160a01b038481166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455604051939092041691829033907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa590600090a4505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610d9e575033610d927f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610dd8576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b610de58686868686612e2c565b505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610ebc575033610eb07f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610ef6576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b337f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96610f2182612f54565b8585604051610f3293929190615273565b60405180910390a25050505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070080547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707015460008581527fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070260205260408120549093849390926001600160a01b039182169290911615610ff55750506000858152600282016020526040902080546001909101546001600160a01b03909116905b8161271061100383896152d2565b61100d91906152e9565b945094505050505b9250929050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156110eb5750336110df7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611125576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b60006111c88a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b918291850190849080828437600092019190915250612f6a92505050565b90506111d5818585613107565b50505050505050505050565b336001600160a01b038616811480159061124057506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b1561128a576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610c52565b610de58686868686613234565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561136657503361135a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156113a0576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b60008a90036113db576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b89881415806113ea5750878614155b806113f55750858414155b806114005750838214155b15611437576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8a8110156115a95760006115558d8d8481811061145957611459615324565b905060200281019061146b9190615353565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92508e91508690508181106114b4576114b4615324565b90506020028101906114c691906153b8565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e92508d915087905081811061150c5761150c615324565b905060200281019061151e91906153b8565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612f6a92505050565b90506115a08188888581811061156d5761156d615324565b905060200201602081019061158291906145ea565b87878681811061159457611594615324565b90506020020135613107565b5060010161143a565b505050505050505050505050565b6115bf6132c7565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30080548160006115ee83615420565b909155505060405133907fdf1eaea754aea6dc7d083377ed7366dd7405e3fb0f16ddfb9448770520e4427990600090a250565b600083900361165c576040517f3fb001d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b038616148015906116b857506001600160a01b03851660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832033845290915290205460ff16155b156116ef576040517fc9c1cf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175d858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080890282810182019093528882529093508892508791829185019084908082843760009201919091525061333b92505050565b5050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156118335750336118277f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561186d576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b60008690036118a8576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85841415806118b75750838214155b156118ee576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b868110156119ca576119c188888381811061190e5761190e615324565b90506020028101906119209190615353565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925089915085905081811061196957611969615324565b905060200281019061197b91906153b8565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925088915086905081811061150c5761150c615324565b506001016118f1565b5050505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611aa3575033611a977f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611add576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b6119ca87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020808b0282810182019093528a82529093508a92508991829185019084908082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250612f6a92505050565b60608151835114611bc857815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c52565b6000835167ffffffffffffffff811115611be457611be4614848565b604051908082528060200260200182016040528015611c0d578160200160208202803683370190505b50905060005b8451811015611c5c57602080820286010151611c379060208084028701015161083b565b828281518110611c4957611c49615324565b6020908102919091010152600101611c13565b509392505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611d33575033611d277f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611d6d576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b611dcc7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061339b915050565b50505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611ea1575033611e957f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611edb576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b60008681526004602052604090205460ff16611f23576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33867f5c0564b4237730adb947143019acb5addfdbf1be3ad1edf72e24a8f9d02fd2c1611f4f83612f54565b8686604051611f6093929190615273565b60405180910390a3505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561203f5750336120337f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612079576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b60008481526004602052604090205460ff166120c1576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290036120fc576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526004602052604090206001016121188385836154a0565b50837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b848460405161214b9291906155ba565b60405180910390a250505050565b60035460ff16612195576040517fc3d4cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61219f338661083b565b6000036121d8576040517fb23b68b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33857f40ebea9c3c7603a5d233a0bec01e483338737b6bed01bed2ac09ccbaa3d4b7ac61220483612f54565b858560405161221593929190615273565b60405180910390a35050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561226f5750825b905060008267ffffffffffffffff16600114801561228c5750303b155b90508115801561229a575080155b156122d1576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156123325784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61234a60405180602001604052806000815250613540565b6123548b8b613551565b61235d89613563565b6123897fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177589600161339b565b60016123958f826155ce565b5060026123a28e826155ce565b50600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688151590811790915560405132907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a3600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0389169081029190911790915560405160009032907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5908390a48b51156124b157327f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed9661249982612f54565b8e6040516124a89291906156e8565b60405180910390a25b83156125125784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b61252a6132c7565b612534600061357c565b565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156126055750336125f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561263f576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151590811790915560405133907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a35050565b6040805160018082528183019092526000916020808301908036833701905050905033816000815181106126d3576126d3615324565b60200260200101906001600160a01b031690816001600160a01b0316815250506126ff8282600061339b565b5050565b600280546109e0906151d7565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156127df5750336127d37f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612819576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b611dcc848484613107565b801561286a5761283382613605565b1561286a576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126ff82826136b7565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300805460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e302602090815260408083208584529091529020606091906128dc906136c2565b9392505050565b6040805180820190915260008152606060208201526000828152600460209081526040918290208251808401909352805460ff1615158352600181018054919284019161292f906151d7565b80601f016020809104026020016040519081016040528092919081815260200182805461295b906151d7565b80156129a85780601f1061297d576101008083540402835291602001916129a8565b820191906000526020600020905b81548152906001019060200180831161298b57829003601f168201915b5050505050815250509050919050565b6129c06132c7565b6129cb83838361339b565b505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58085529083528184203385529092529091205460ff16610dd8576040517fee074e7400000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612b61575033612b557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612b9b576040517f76c1743100000000000000000000000000000000000000000000000000000000815260048101829052602401610c52565b6129cb83836136cf565b336001600160a01b0386168114801590612c0457506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612c4e576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610c52565b610de586868686866137e6565b612c636132c7565b6001600160a01b038116612ca6576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b612caf8161357c565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a26000000000000000000000000000000000000000000000000000000001480612d4557507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061087e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461087e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000148061087e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461087e565b60008581526004602052604090205460ff16612e74576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003612eaf576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828114612ee8576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83811015610de557612f4c858583818110612f0857612f08615324565b9050602002016020810190612f1d91906145ea565b87858585818110612f3057612f30615324565b90506020020135604051806020016040528060008152506138a7565b600101612eeb565b606061087e6001600160a01b038316601461391d565b60008351600003612fa7576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251600003612fe2576040517fd8b8bfb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815183511461301d576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054908061302c83615420565b9091555050604080518082018252600180825260208083018881526000805481526004909252939020825181547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690151517815592519192919082019061309490826155ce565b5090505060005b83518110156130fb576130f38482815181106130b9576130b9615324565b60200260200101516000548584815181106130d6576130d6615324565b6020026020010151604051806020016040528060008152506138a7565b60010161309b565b50506000549392505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613168576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108211156131a4576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260028201602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038716908117825560019091018590558251908152908101849052859133917f3001fd4350a0a56b8c380c23b85aebc6fb22b32c98a314ba3aecc0bc23a1cf9091015b60405180910390a350505050565b6001600160a01b038416613277576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b6001600160a01b0385166132ba576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b61175d8585858585613b43565b336132f97f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614612534576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c52565b6001600160a01b03831661337e576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b6129cb836000848460405180602001604052806000815250613b43565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30060005b835181101561175d57815460009081526001830160209081526040808320888452909152812085518592908790859081106133fc576133fc615324565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550821561348a5761348484828151811061345657613456615324565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090613b96565b506134cf565b6134cd84828151811061349f5761349f615324565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090613bab565b505b8215158482815181106134e4576134e4615324565b60200260200101516001600160a01b0316336001600160a01b03167fc9f6f69b3c19bd2b7eb8273129bbca5e3db0e3be63ca9903e140122a5bbb556e8860405161353091815260200190565b60405180910390a46001016133bf565b613548613bc0565b612caf81613c27565b613559613bc0565b6126ff8282613c38565b61356b613bc0565b61357481613c4a565b612caf613c5b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60035460009061010090046001600160a01b031661362557506000919050565b6003546040517f334980a50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526101009092049091169063334980a590602401602060405180830381865afa15801561368e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e9190615716565b919050565b6126ff338383613c63565b606060006128dc83613d4c565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613730576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271082111561376c576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117825560018201839055604080519182526020820184905233917f37dd87932a16caf40cd3c1ba643a0336807c74041d8c93260524aca37878f010910160405180910390a2505050565b6001600160a01b038416613829576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b6001600160a01b03851661386c576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b6040805160018082526020820186905281830190815260608201859052608082019092529061389e8787848487613b43565b50505050505050565b6001600160a01b0384166138ea576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b60408051600180825260208201869052818301908152606082018590526080820190925290610de5600087848487613b43565b606082600061392d8460026152d2565b613938906002615733565b67ffffffffffffffff81111561395057613950614848565b6040519080825280601f01601f19166020018201604052801561397a576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106139b1576139b1615324565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613a1457613a14615324565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613a508560026152d2565b613a5b906001615733565b90505b6001811115613af8577f303132333435363738396162636465660000000000000000000000000000000083600f1660108110613a9c57613a9c615324565b1a60f81b828281518110613ab257613ab2615324565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049290921c91613af181615746565b9050613a5e565b508115613b3b576040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610c52565b949350505050565b613b4f85858585613da7565b6001600160a01b0384161561175d5782513390600103613b885760208481015190840151613b81838989858589614010565b5050610de5565b610de58187878787876141ce565b60006128dc836001600160a01b038416614338565b60006128dc836001600160a01b038416614387565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16612534576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613c2f613bc0565b612caf8161447a565b613c40613bc0565b6126ff82826136cf565b613c52613bc0565b612caf816144c6565b612534613bc0565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316613cc7576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610c52565b6001600160a01b03848116600081815260018401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101613226565b606081600001805480602002602001604051908101604052809291908181526020018280548015610b4157602002820191906000526020600020905b815481526020019060010190808311613d885750505050509050919050565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45009114613e1157825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610c52565b3360005b8451811015613f30576020818102868101820151908601909101516001600160a01b03891615613ee1576000828152602086815260408083206001600160a01b038d16845290915290205481811015613eba576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610c52565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615613f26576000828152602086815260408083206001600160a01b038c16845290915281208054839290613f20908490615733565b90915550505b5050600101613e15565b508351600103613fb15760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613fa2929190918252602082015260400190565b60405180910390a45050610de5565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161400092919061577b565b60405180910390a4505050505050565b6001600160a01b0384163b15610de5576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e619061406d90899089908890889088906004016157a0565b6020604051808303816000875af19250505080156140c6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526140c3918101906157e3565b60015b614148573d8080156140f4576040519150601f19603f3d011682016040523d82523d6000602084013e6140f9565b606091505b508051600003614140576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c52565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461389e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c52565b6001600160a01b0384163b15610de5576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c819061422b9089908990889088908890600401615800565b6020604051808303816000875af1925050508015614284575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252614281918101906157e3565b60015b6142b2573d8080156140f4576040519150601f19603f3d011682016040523d82523d6000602084013e6140f9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461389e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610c52565b600081815260018301602052604081205461437f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561087e565b50600061087e565b600081815260018301602052604081205480156144705760006143ab60018361585e565b85549091506000906143bf9060019061585e565b90508082146144245760008660000182815481106143df576143df615324565b906000526020600020015490508087600001848154811061440257614402615324565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061443557614435615871565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061087e565b600091505061087e565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45007f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026129cb83826155ce565b612c63613bc0565b80356001600160a01b03811681146136b257600080fd5b600080604083850312156144f857600080fd5b614501836144ce565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612caf57600080fd5b60006020828403121561454f57600080fd5b81356128dc8161450f565b6000815180845260005b8181101561458057602081850181015186830182015201614564565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006128dc602083018461455a565b6000602082840312156145e357600080fd5b5035919050565b6000602082840312156145fc57600080fd5b6128dc826144ce565b60008083601f84011261461757600080fd5b50813567ffffffffffffffff81111561462f57600080fd5b6020830191508360208260051b850101111561101557600080fd5b60008060008060006060868803121561466257600080fd5b85359450602086013567ffffffffffffffff8082111561468157600080fd5b61468d89838a01614605565b909650945060408801359150808211156146a657600080fd5b506146b388828901614605565b969995985093965092949392505050565b60008083601f8401126146d657600080fd5b50813567ffffffffffffffff8111156146ee57600080fd5b60208301915083602082850101111561101557600080fd5b6000806000806040858703121561471c57600080fd5b843567ffffffffffffffff8082111561473457600080fd5b614740888389016146c4565b9096509450602087013591508082111561475957600080fd5b50614766878288016146c4565b95989497509550505050565b6000806040838503121561478557600080fd5b50508035926020909101359150565b60008060008060008060008060a0898b0312156147b057600080fd5b883567ffffffffffffffff808211156147c857600080fd5b6147d48c838d016146c4565b909a50985060208b01359150808211156147ed57600080fd5b6147f98c838d01614605565b909850965060408b013591508082111561481257600080fd5b5061481f8b828c01614605565b9095509350614832905060608a016144ce565b9150608089013590509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156148be576148be614848565b604052919050565b600067ffffffffffffffff8211156148e0576148e0614848565b5060051b60200190565b600082601f8301126148fb57600080fd5b8135602061491061490b836148c6565b614877565b8083825260208201915060208460051b87010193508684111561493257600080fd5b602086015b8481101561494e5780358352918301918301614937565b509695505050505050565b600082601f83011261496a57600080fd5b813567ffffffffffffffff81111561498457614984614848565b6149b560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614877565b8181528460208386010111156149ca57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156149ff57600080fd5b614a08866144ce565b9450614a16602087016144ce565b9350604086013567ffffffffffffffff80821115614a3357600080fd5b614a3f89838a016148ea565b94506060880135915080821115614a5557600080fd5b614a6189838a016148ea565b93506080880135915080821115614a7757600080fd5b50614a8488828901614959565b9150509295509295909350565b60008060008060008060008060008060a08b8d031215614ab057600080fd5b8a3567ffffffffffffffff80821115614ac857600080fd5b614ad48e838f01614605565b909c509a5060208d0135915080821115614aed57600080fd5b614af98e838f01614605565b909a50985060408d0135915080821115614b1257600080fd5b614b1e8e838f01614605565b909850965060608d0135915080821115614b3757600080fd5b614b438e838f01614605565b909650945060808d0135915080821115614b5c57600080fd5b50614b698d828e01614605565b915080935050809150509295989b9194979a5092959850565b600080600080600060608688031215614b9a57600080fd5b614ba3866144ce565b9450602086013567ffffffffffffffff8082111561468157600080fd5b60008060008060008060608789031215614bd957600080fd5b863567ffffffffffffffff80821115614bf157600080fd5b614bfd8a838b01614605565b90985096506020890135915080821115614c1657600080fd5b614c228a838b01614605565b90965094506040890135915080821115614c3b57600080fd5b50614c4889828a01614605565b979a9699509497509295939492505050565b60008060008060008060608789031215614c7357600080fd5b863567ffffffffffffffff80821115614c8b57600080fd5b614bfd8a838b016146c4565b600082601f830112614ca857600080fd5b81356020614cb861490b836148c6565b8083825260208201915060208460051b870101935086841115614cda57600080fd5b602086015b8481101561494e57614cf0816144ce565b8352918301918301614cdf565b60008060408385031215614d1057600080fd5b823567ffffffffffffffff80821115614d2857600080fd5b614d3486838701614c97565b93506020850135915080821115614d4a57600080fd5b50614d57858286016148ea565b9150509250929050565b60008151808452602080850194506020840160005b83811015614d9257815187529582019590820190600101614d76565b509495945050505050565b6020815260006128dc6020830184614d61565b8015158114612caf57600080fd5b80356136b281614db0565b600080600060408486031215614dde57600080fd5b833567ffffffffffffffff811115614df557600080fd5b614e0186828701614605565b9094509250506020840135614e1581614db0565b809150509250925092565b600080600080600060608688031215614e3857600080fd5b85359450602086013567ffffffffffffffff80821115614e5757600080fd5b614e6389838a016146c4565b90965094506040880135915080821115614e7c57600080fd5b506146b3888289016146c4565b600080600060408486031215614e9e57600080fd5b83359250602084013567ffffffffffffffff811115614ebc57600080fd5b614ec8868287016146c4565b9497909650939450505050565b60008060008060008060008060006101208a8c031215614ef457600080fd5b893567ffffffffffffffff80821115614f0c57600080fd5b614f188d838e01614959565b9a5060208c0135915080821115614f2e57600080fd5b614f3a8d838e01614959565b995060408c0135915080821115614f5057600080fd5b614f5c8d838e01614959565b9850614f6a60608d016144ce565b975060808c01359650614f7f60a08d016144ce565b955060c08c0135915080821115614f9557600080fd5b50614fa28c828d01614c97565b935050614fb160e08b01614dbe565b9150614fc06101008b016144ce565b90509295985092959850929598565b600060208284031215614fe157600080fd5b81356128dc81614db0565b60008060408385031215614fff57600080fd5b8235915061500f602084016144ce565b90509250929050565b60008060006060848603121561502d57600080fd5b8335925061503d602085016144ce565b9150604084013590509250925092565b6000806040838503121561506057600080fd5b615069836144ce565b9150602083013561507981614db0565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156150c55783516001600160a01b0316835292840192918401916001016150a0565b50909695505050505050565b6020815281511515602082015260006020830151604080840152613b3b606084018261455a565b60008060006060848603121561510d57600080fd5b83359250602084013567ffffffffffffffff81111561512b57600080fd5b61513786828701614c97565b9250506040840135614e1581614db0565b6000806040838503121561515b57600080fd5b615164836144ce565b915061500f602084016144ce565b600080600080600060a0868803121561518a57600080fd5b615193866144ce565b94506151a1602087016144ce565b93506040860135925060608601359150608086013567ffffffffffffffff8111156151cb57600080fd5b614a8488828901614959565b600181811c908216806151eb57607f821691505b602082108103615224577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000615286604083018661455a565b828103602084015261529981858761522a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761087e5761087e6152a3565b60008261531f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261538857600080fd5b83018035915067ffffffffffffffff8211156153a357600080fd5b60200191503681900382131561101557600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126153ed57600080fd5b83018035915067ffffffffffffffff82111561540857600080fd5b6020019150600581901b360382131561101557600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615451576154516152a3565b5060010190565b601f8211156129cb576000816000526020600020601f850160051c810160208610156154815750805b601f850160051c820191505b81811015610de55782815560010161548d565b67ffffffffffffffff8311156154b8576154b8614848565b6154cc836154c683546151d7565b83615458565b6000601f84116001811461551e57600085156154e85750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561175d565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561556d578685013582556020948501946001909201910161554d565b50868210156155a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b602081526000613b3b60208301848661522a565b815167ffffffffffffffff8111156155e8576155e8614848565b6155fc816155f684546151d7565b84615458565b602080601f83116001811461564f57600084156156195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610de5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561569c5788860151825594840194600190910190840161567d565b50858210156156d857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006156fb604083018561455a565b828103602084015261570d818561455a565b95945050505050565b60006020828403121561572857600080fd5b81516128dc81614db0565b8082018082111561087e5761087e6152a3565b600081615755576157556152a3565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60408152600061578e6040830185614d61565b828103602084015261570d8185614d61565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526157d860a083018461455a565b979650505050505050565b6000602082840312156157f557600080fd5b81516128dc8161450f565b60006001600160a01b03808816835280871660208401525060a0604083015261582c60a0830186614d61565b828103606084015261583e8186614d61565b90508281036080840152615852818561455a565b98975050505050505050565b8181038181111561087e5761087e6152a3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220db90e05352a48c22934f6c71554283faac8b47d358720c146909263f86ac53cc64736f6c634300081600330000000000000000000000000000000000000000000000000000000000000001