[ { "inputs": [ { "internalType": "bool", "name": "disable", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AirdropTooFewAddresses", "type": "error" }, { "inputs": [], "name": "BatchSizeTooSmall", "type": "error" }, { "inputs": [], "name": "CallerNotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "CallerNotTokenOwnerOrDelegate", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [], "name": "EmptyTokenURI", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidTokenURIIndex", "type": "error" }, { "inputs": [], "name": "MaxRoyaltyError", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "NoTokensSpecified", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotOwnerAdminOrMintContract", "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": "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": "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": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "TokenUriPinned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenUriUnpinned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "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": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string", "name": "baseUri", "type": "string" } ], "name": "addTokenUris", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "string", "name": "baseUri", "type": "string" } ], "name": "airdrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "numTokens", "type": "uint128" }, { "internalType": "string", "name": "baseUri", "type": "string" } ], "name": "batchMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "blocklistRegistry", "outputs": [ { "internalType": "contract IBlockListRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "externalMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "floatWhenUnpinned", "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": [], "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": "hasPinnedTokenURI", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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" }, { "internalType": "address", "name": "initNftDelegationRegistry", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint256", "name": "royaltyPercent", "type": "uint256" } ], "name": "mint", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "pinTokenURI", "outputs": [], "stateMutability": "nonpayable", "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": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "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": "newNftDelegationRegistry", "type": "address" } ], "name": "setNftDelegationRegistry", "outputs": [], "stateMutability": "nonpayable", "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": "bool", "name": "float", "type": "bool" } ], "name": "setUnpinnedFloatState", "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": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURIs", "outputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string[]", "name": "uris", "type": "string[]" }, { "internalType": "bool", "name": "pinned", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "unpinTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005e7b38038062005e7b833981016040819052620000349162000100565b80156200004557620000456200004c565b506200012b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200009d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000fd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011357600080fd5b815180151581146200012457600080fd5b9392505050565b615d40806200013b6000396000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c806370a08231116101c8578063a3246ad311610104578063d8d045b4116100a2578063e985e9c51161007c578063e985e9c514610853578063ec85a37e146108ae578063f2fde38b146108c1578063ffa1ad74146108d457600080fd5b8063d8d045b41461081a578063da14cbbc1461082d578063dad83ed91461084057600080fd5b8063c87b56dd116100de578063c87b56dd146107ce578063cc39943c146107e1578063d0def521146107f4578063d4bf502a1461080757600080fd5b8063a3246ad314610782578063b88d4fde146107a2578063bbe4e87b146107b557600080fd5b80638bb9c5bf1161017157806395d89b411161014b57806395d89b41146107415780639713c807146107495780639c22fcbb1461075c578063a22cb4651461076f57600080fd5b80638bb9c5bf1461067b5780638da5cb5b1461068e57806391d14854146106be57600080fd5b80637c5d28bd116101a25780637c5d28bd146106005780637de19c5f146106135780637e6cc5421461062657600080fd5b806370a08231146105be578063715018a6146105d157806375b238fc146105d957600080fd5b806342842e0e116102a25780635457977e116102405780636352211e1161021a5780636352211e146105635780636bf0651f146105765780636c6ad242146105895780636c8b703f1461059c57600080fd5b80635457977e1461052b57806356000f771461053d5780635b23e3ce1461055057600080fd5b80634a5970651161027c5780634a597065146104ef57806351dc02f2146104fc578063528cfa981461050f57806352dbd6da1461051857600080fd5b806342842e0e146104b657806342966c68146104c9578063455086e1146104dc57600080fd5b80631a006e8a1161030f57806329471dc2116102e957806329471dc2146104565780632a55205a1461046957806333aa4fb31461049b57806339ae37c0146104a357600080fd5b80631a006e8a146104095780631ff7f0bc1461041c57806323b872dd1461044357600080fd5b8063095ea7b311610340578063095ea7b3146103cf5780631145a243146103e457806318160ddd146103f757600080fd5b806301ffc9a71461036757806306fdde031461038f578063081812fc146103a4575b600080fd5b61037a610375366004614ea7565b610910565b60405190151581526020015b60405180910390f35b610397610af8565b6040516103869190614f14565b6103b76103b2366004614f27565b610bae565b6040516001600160a01b039091168152602001610386565b6103e26103dd366004614f57565b610bf6565b005b6002546103b7906001600160a01b031681565b6000545b604051908152602001610386565b6103e2610417366004614f81565b610c44565b6103fb7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af581565b6103e2610451366004614f9c565b610da6565b6103e261046436600461501a565b610e63565b61047c610477366004615086565b610f9e565b604080516001600160a01b039093168352602083019190915201610386565b6103e2611079565b6103e26104b13660046150ed565b6110e3565b6103e26104c4366004614f9c565b6113c5565b6103e26104d7366004614f27565b6113e5565b61037a6104ea366004614f27565b611458565b60015461037a9060ff1681565b6103e261050a366004615140565b6114af565b6103fb61271081565b6103e2610526366004614f27565b6115fe565b60015461037a90610100900460ff1681565b6103e261054b366004615197565b6116ef565b6103e261055e366004615197565b61186b565b6103b7610571366004614f27565b611932565b6103e26105843660046150ed565b61193d565b6103e2610597366004615211565b611cda565b6105af6105aa366004614f27565b611e12565b60405161038693929190615264565b6103fb6105cc366004614f81565b612020565b6103e26120a7565b6103fb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103e261060e3660046152f9565b6120bb565b6103e2610621366004615086565b6121eb565b61047c7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701546001600160a01b0390911691565b6103e2610689366004614f27565b612335565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166103b7565b61037a6106cc366004615316565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083209483529381528382206001600160a01b0393909316825291909152205460ff1690565b610397612397565b6103e2610757366004615342565b6123e8565b6103e261076a366004614f81565b6124e3565b6103e261077d366004615367565b612648565b610795610790366004614f27565b612698565b604051610386919061539e565b6103e26107b03660046154a3565b612707565b6001546103b7906201000090046001600160a01b031681565b6103976107dc366004614f27565b61271e565b6103e26107ef3660046152f9565b612894565b6103e2610802366004615211565b6129ee565b6103e26108153660046155a6565b612ade565b6103e2610828366004614f57565b612af1565b6103e261083b3660046155f6565b612beb565b6103e261084e366004615663565b612d5e565b61037a6108613660046156cf565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6103e26108bc366004615719565b6130ff565b6103e26108cf366004614f81565b613435565b6103976040518060400160405280600581526020017f332e312e3100000000000000000000000000000000000000000000000000000081525081565b600061091b8261348c565b8061092a575061092a8261356f565b8061097657507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806109c257507fffffffff0000000000000000000000000000000000000000000000000000000082167f06e1bc5b00000000000000000000000000000000000000000000000000000000145b80610a0e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1c8e024d00000000000000000000000000000000000000000000000000000000145b80610a5a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f2464f17b00000000000000000000000000000000000000000000000000000000145b80610aa657507f0d23ecb9000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610af257507fffffffff0000000000000000000000000000000000000000000000000000000082167fc74089ae00000000000000000000000000000000000000000000000000000000145b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008054606091908190610b2a90615825565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690615825565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b505050505091505090565b6000610bb982613606565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b0316610af2565b610bff82613657565b15610c36576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4082826136fe565b5050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610d13575033610d077f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610d39576040516376c1743160e01b8152600481018290526024015b60405180910390fd5b600280546001600160a01b038481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169190829033907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa590600090a4505050565b6001600160a01b038216610de9576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610d30565b6000610df6838333613709565b9050836001600160a01b0316816001600160a01b031614610e5d576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610d30565b50505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610f32575033610f267f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610f53576040516376c1743160e01b815260048101829052602401610d30565b337f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96610f7e8261383d565b8585604051610f8f93929190615872565b60405180910390a25050505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070080547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707015460008581527fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070260205260408120549093849390926001600160a01b0391821692909116156110525750506000858152600282016020526040902080546001909101546001600160a01b03909116905b8161271061106083896158e7565b61106a91906158fe565b945094505050505b9250929050565b611081613853565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30080548160006110b083615939565b909155505060405133907fdf1eaea754aea6dc7d083377ed7366dd7405e3fb0f16ddfb9448770520e4427990600090a250565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156111b25750336111a67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156111d3576040516376c1743160e01b815260048101829052602401610d30565b600082900361120e576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002841015611249576040517f8015753900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054611258906001615953565b9050600060016112688784615953565b6112729190615966565b9050868690506000808282546112889190615953565b925050819055506007604051806080016040528060006001600160a01b0316815260200184815260200183815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160049092020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091178155908301519381019390935550604081015160028301556060810151909190600382019061136c90826159c1565b50505060005b868110156113bb576113b388888381811061138f5761138f615a81565b90506020020160208101906113a49190614f81565b6113ae8386615953565b6138c7565b600101611372565b5050505050505050565b6113e083838360405180602001604052806000815250612707565b505050565b60006113f082611932565b90506113fd81338461395e565b611433576040517fc9c1cf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61143c82613a22565b506000908152600360205260409020805460ff19166001179055565b600061146382613a76565b611499576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526005602052604090205460ff1690565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561157e5750336115727f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561159f576040516376c1743160e01b815260048101829052602401610d30565b610e5d7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af5858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250613a93915050565b61160781613a76565b61163d576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61164681613c3f565b61167c576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260056020526040808220805460ff191690555182917fc4c6bc7f651e4303914b61cddcb11cf5e983ffce8f33c7fe68aeeae65bbb1d0591a26040518181527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a150565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156117be5750336117b27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156117df576040516376c1743160e01b815260048101829052602401610d30565b6117e886613a76565b61181e576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33867f5c0564b4237730adb947143019acb5addfdbf1be3ad1edf72e24a8f9d02fd2c161184a8361383d565b868660405161185b93929190615872565b60405180910390a3505050505050565b60015460ff166118a7576040517fc3d4cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b085613c3f565b6118e6576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33857f40ebea9c3c7603a5d233a0bec01e483338737b6bed01bed2ac09ccbaa3d4b7ac6119128361383d565b858560405161192393929190615872565b60405180910390a35050505050565b6000610af282613606565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031633148015906119fa57507f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758452825280832033845290915290205460ff16155b8015611a8957507f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58452825280832033845290915290205460ff16155b15611ac0576040517fe08662c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000819003611afb576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000839003611b36576040517f374eaed400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101611b74838583615ab0565b5060005b84811015611cd257611ba1868683818110611b9557611b95615a81565b90506020020135613a76565b611bd7576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091526fffffffffffffffffffffffffffffffff80841682528216602082015260056000888885818110611c1457611c14615a81565b602090810292909201358352508181019290925260400160009081206002018054600181018255908252908290208351928401516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029316929092179101557ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7878784818110611cab57611cab615a81565b90506020020135604051611cc191815260200190565b60405180910390a150600101611b78565b505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58085529083528184203385529092529091205460ff16611d9c576040517fee074e7400000000000000000000000000000000000000000000000000000000815260048101829052602401610d30565b6000829003611dd7576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549080611de683615939565b9091555050600080548152600460205260409020611e05838583615ab0565b50610e5d846000546138c7565b600060606000611e2184613a76565b611e57576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526005602090815260408083208151606081018352815460ff1615158152600182015481850152600282018054845181870281018701865281815292959394860193879084015b82821015611f0157600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611ea2565b50505091525050604081015151909150611f1c906001615953565b67ffffffffffffffff811115611f3457611f346153eb565b604051908082528060200260200182016040528015611f6757816020015b6060815260200190600190039081611f525790505b509250611f7385613d26565b83600081518110611f8657611f86615a81565b602002602001018190525060005b816040015151811015611fda57611fab8282613dd5565b84611fb7836001615953565b81518110611fc757611fc7615a81565b6020908102919091010152600101611f94565b50805191508115611ff15780602001519350612018565b600154610100900460ff16612007576000612015565b600183516120159190615966565b93505b509193909250565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b038316612086576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610d30565b6001600160a01b039092166000908152600390920160205250604090205490565b6120af613853565b6120b96000613e8b565b565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561218a57503361217e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156121ab576040516376c1743160e01b815260048101829052602401610d30565b6001805460ff191683151590811790915560405133907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a35050565b6121f482613a76565b61222a576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61223382613c3f565b612269576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560205260409020600201548111156122b4576040517f58eafc8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560205260408082206001808201859055815460ff191617905551829184917fdafe56f3e547ebb1818fc8353ba53591db2528d41cbb7a35af2d9469f44905339190a36040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7906020015b60405180910390a15050565b60408051600180825281830190925260009160208083019080368337019050509050338160008151811061236b5761236b615a81565b60200260200101906001600160a01b031690816001600160a01b031681525050610c4082826000613a93565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930091610b2a90615825565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156124b75750336124ab7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156124d8576040516376c1743160e01b815260048101829052602401610d30565b610e5d848484613f14565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156125b25750336125a67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156125d3576040516376c1743160e01b815260048101829052602401610d30565b600180546001600160a01b03848116620100008181027fffffffffffffffffffff0000000000000000000000000000000000000000ffff851617909455604051939092041691829033907f741ffc7ad72eee12c151d25e52a967a1addf58aca8ed670dcad256c12d64bb8190600090a4505050565b801561268e5761265782613657565b1561268e576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c408282614041565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300805460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e302602090815260408083208584529091529020606091906127009061404c565b9392505050565b612712848484610da6565b610e5d84848484614059565b606061272982613a76565b61275f576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602090815260408083208151606081018352815460ff1615158152600182015481850152600282018054845181870281018701865281815292959394860193879084015b8282101561280957600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000090910416818301528252600190920191016127aa565b505050915250508051909150156128505780602001516000036128365761282f83613d26565b915061288e565b61282f816001836020015161284b9190615966565b613dd5565b604081015151158061286a5750600154610100900460ff16155b156128785761282f83613d26565b61270081600183604001515161284b9190615966565b50919050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156129635750336129577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612984576040516376c1743160e01b815260048101829052602401610d30565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100841515021781556000546040805192835260208301919091527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c9101612329565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612abd575033612ab17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611d9c576040516376c1743160e01b815260048101829052602401610d30565b612ae6613853565b6113e0838383613a93565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612bc0575033612bb47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612be1576040516376c1743160e01b815260048101829052602401610d30565b6113e083836141f7565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612cba575033612cae7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612cdb576040516376c1743160e01b815260048101829052602401610d30565b6000849003612d16576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549080612d2583615939565b9091555050600080548152600460205260409020612d44858783615ab0565b50612d526000548484613f14565b611cd2866000546138c7565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015612e2d575033612e217f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612e4e576040516376c1743160e01b815260048101829052602401610d30565b6001600160a01b038516612e8e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000829003612ec9576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002846fffffffffffffffffffffffffffffffff161015612f16576040517f26ce41c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054612f25906001615953565b905060006001612f476fffffffffffffffffffffffffffffffff881684615953565b612f519190615966565b9050856fffffffffffffffffffffffffffffffff16600080828254612f769190615953565b9250508190555060076040518060800160405280896001600160a01b0316815260200184815260200183815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160049092020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091178155908301519381019390935550604081015160028301556060810151909190600382019061305990826159c1565b5050506001600160a01b03871660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793036020526040902080546fffffffffffffffffffffffffffffffff8816019055815b6130b8826001615953565b8110156113bb5760405181906001600160a01b038a16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46001016130ad565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561314a5750825b905060008267ffffffffffffffff1660011480156131675750303b155b905081158015613175575080155b156131ac576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561320d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6132178f8f61430e565b6132218c8c614320565b61322a8a614332565b6132567fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758a6001613a93565b6001805460ff19168915159081179091556040516001600160a01b038c16907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a3600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038981169182179092556040519091600091908d16907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5908390a4600180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03898116918202929092179092556040516000918d16907f741ffc7ad72eee12c151d25e52a967a1addf58aca8ed670dcad256c12d64bb81908390a48c51156133c3576001600160a01b038a167f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed966133ab8261383d565b8f6040516133ba929190615b70565b60405180910390a25b83156134245784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050505050565b61343d613853565b6001600160a01b038116613480576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610d30565b61348981613e8b565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061351f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610af257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610af2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610af257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610af2565b6000806136128361434b565b90506001600160a01b038116610af2576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610d30565b6002546000906001600160a01b031661367257506000919050565b6002546040517f334980a50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063334980a590602401602060405180830381865afa1580156136d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190615b9e565b919050565b610c408282336143d6565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300816137368561434b565b90506001600160a01b03841615613752576137528185876143e3565b6001600160a01b038116156137925761376f600086600080614479565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b038616156137c3576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6060610af26001600160a01b0383166014614610565b336138857f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146120b9576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610d30565b6001600160a01b03821661390a576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610d30565b600061391883836000613709565b90506001600160a01b038116156113e0576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610d30565b60006001600160a01b03831615801590613a1a5750826001600160a01b0316846001600160a01b031614806139d757506001600160a01b0380851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b80613a1a575060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b038481169116145b949350505050565b6000613a316000836000613709565b90506001600160a01b038116610c40576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101839052602401610d30565b600080613a828361434b565b6001600160a01b0316141592915050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30060005b8351811015613c385781546000908152600183016020908152604080832088845290915281208551859290879085908110613af457613af4615a81565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508215613b8257613b7c848281518110613b4e57613b4e615a81565b6020908102919091018101518454600090815260028601835260408082208a8352909352919091209061482e565b50613bc7565b613bc5848281518110613b9757613b97615a81565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090614843565b505b821515848281518110613bdc57613bdc615a81565b60200260200101516001600160a01b0316336001600160a01b03167fc9f6f69b3c19bd2b7eb8273129bbca5e3db0e3be63ca9903e140122a5bbb556e88604051613c2891815260200190565b60405180910390a4600101613ab7565b5050505050565b600080613c4b8361434b565b90506001600160a01b0381163303613c665750600192915050565b6001546201000090046001600160a01b0316613c855750600092915050565b6001546040517ff5eb12c20000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03838116602483015230604483015260648201869052620100009092049091169063f5eb12c290608401602060405180830381865afa158015613d02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127009190615b9e565b6000818152600460205260409020805460609190613d4390615825565b80601f0160208091040260200160405190810160405280929190818152602001828054613d6f90615825565b8015613dbc5780601f10613d9157610100808354040283529160200191613dbc565b820191906000526020600020905b815481529060010190602001808311613d9f57829003601f168201915b5050505050905080516000036136f95761270082614858565b6060600683604001518381518110613def57613def615a81565b6020026020010151600001516fffffffffffffffffffffffffffffffff1681548110613e1d57613e1d615a81565b90600052602060002001613e6384604001518481518110613e4057613e40615a81565b6020026020010151602001516fffffffffffffffffffffffffffffffff166149a9565b604051602001613e74929190615bbb565b604051602081830303815290604052905092915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613f75576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115613fb1576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260028201602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038716908117825560019091018590558251908152908101849052859133917f3001fd4350a0a56b8c380c23b85aebc6fb22b32c98a314ba3aecc0bc23a1cf9091015b60405180910390a350505050565b610c40338383614a49565b6060600061270083614b1c565b6001600160a01b0383163b15610e5d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a02906140b4903390889087908790600401615c6b565b6020604051808303816000875af19250505080156140ef575060408051601f3d908101601f191682019092526140ec91810190615ca7565b60015b614171573d80801561411d576040519150601f19603f3d011682016040523d82523d6000602084013e614122565b606091505b508051600003614169576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610d30565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014613c38576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610d30565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316614258576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115614294576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117825560018201839055604080519182526020820184905233917f37dd87932a16caf40cd3c1ba643a0336807c74041d8c93260524aca37878f010910160405180910390a2505050565b614316614b78565b610c408282614bdf565b614328614b78565b610c408282614c22565b61433a614b78565b61434381614c34565b613489614c45565b60008181526003602052604081205460ff161561436a57506000919050565b60008211801561437c57506000548211155b156143ce5760008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031680610af2576143c683614858565b509392505050565b506000919050565b6113e08383836001614479565b6143ee83838361395e565b6113e0576001600160a01b038316614435576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610d30565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610d30565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930081806144ae57506001600160a01b03831615155b156145c75760006144be85613606565b90506001600160a01b038416158015906144ea5750836001600160a01b0316816001600160a01b031614155b801561453b57506001600160a01b0380821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b1561457d576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610d30565b82156145c55784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608260006146208460026158e7565b61462b906002615953565b67ffffffffffffffff811115614643576146436153eb565b6040519080825280601f01601f19166020018201604052801561466d576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106146a4576146a4615a81565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061470757614707615a81565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006147438560026158e7565b61474e906001615953565b90505b60018111156147eb577f303132333435363738396162636465660000000000000000000000000000000083600f166010811061478f5761478f615a81565b1a60f81b8282815181106147a5576147a5615a81565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049290921c916147e481615cc4565b9050614751565b508115613a1a576040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610d30565b6000612700836001600160a01b038416614c4d565b6000612700836001600160a01b038416614c9c565b6000606060005b6007548110156148cd576007818154811061487c5761487c615a81565b90600052602060002090600402016001015484101580156148c15750600781815481106148ab576148ab615a81565b9060005260206000209060040201600201548411155b6148cd5760010161485f565b60075481106148f2576000604051806020016040528060008152509250925050915091565b60006007828154811061490757614907615a81565b90600052602060002090600402016003016149506007848154811061492e5761492e615a81565b9060005260206000209060040201600101548761494b9190615966565b6149a9565b604051602001614961929190615bbb565b60405160208183030381529060405290506007828154811061498557614985615a81565b60009182526020909120600490910201546001600160a01b03169590945092505050565b606060006149b683614d8f565b600101905060008167ffffffffffffffff8111156149d6576149d66153eb565b6040519080825280601f01601f191660200182016040528015614a00576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084614a0a57509392505050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b038316614ab5576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610d30565b6001600160a01b038481166000818152600584016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101614033565b606081600001805480602002602001604051908101604052809291908181526020018280548015614b6c57602002820191906000526020600020905b815481526020019060010190808311614b58575b50505050509050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166120b9576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614be7614b78565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930080614c1384826159c1565b5060018101610e5d83826159c1565b614c2a614b78565b610c4082826141f7565b614c3c614b78565b61348981614e71565b6120b9614b78565b6000818152600183016020526040812054614c9457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610af2565b506000610af2565b60008181526001830160205260408120548015614d85576000614cc0600183615966565b8554909150600090614cd490600190615966565b9050808214614d39576000866000018281548110614cf457614cf4615a81565b9060005260206000200154905080876000018481548110614d1757614d17615a81565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614d4a57614d4a615cdb565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610af2565b6000915050610af2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614dd8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614e04576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614e2257662386f26fc10000830492506010015b6305f5e1008310614e3a576305f5e100830492506008015b6127108310614e4e57612710830492506004015b60648310614e60576064830492506002015b600a8310610af25760010192915050565b61343d614b78565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461348957600080fd5b600060208284031215614eb957600080fd5b813561270081614e79565b60005b83811015614edf578181015183820152602001614ec7565b50506000910152565b60008151808452614f00816020860160208601614ec4565b601f01601f19169290920160200192915050565b6020815260006127006020830184614ee8565b600060208284031215614f3957600080fd5b5035919050565b80356001600160a01b03811681146136f957600080fd5b60008060408385031215614f6a57600080fd5b614f7383614f40565b946020939093013593505050565b600060208284031215614f9357600080fd5b61270082614f40565b600080600060608486031215614fb157600080fd5b614fba84614f40565b9250614fc860208501614f40565b9150604084013590509250925092565b60008083601f840112614fea57600080fd5b50813567ffffffffffffffff81111561500257600080fd5b60208301915083602082850101111561107257600080fd5b6000806000806040858703121561503057600080fd5b843567ffffffffffffffff8082111561504857600080fd5b61505488838901614fd8565b9096509450602087013591508082111561506d57600080fd5b5061507a87828801614fd8565b95989497509550505050565b6000806040838503121561509957600080fd5b50508035926020909101359150565b60008083601f8401126150ba57600080fd5b50813567ffffffffffffffff8111156150d257600080fd5b6020830191508360208260051b850101111561107257600080fd5b6000806000806040858703121561510357600080fd5b843567ffffffffffffffff8082111561511b57600080fd5b615054888389016150a8565b801515811461348957600080fd5b80356136f981615127565b60008060006040848603121561515557600080fd5b833567ffffffffffffffff81111561516c57600080fd5b615178868287016150a8565b909450925050602084013561518c81615127565b809150509250925092565b6000806000806000606086880312156151af57600080fd5b85359450602086013567ffffffffffffffff808211156151ce57600080fd5b6151da89838a01614fd8565b909650945060408801359150808211156151f357600080fd5b5061520088828901614fd8565b969995985093965092949392505050565b60008060006040848603121561522657600080fd5b61522f84614f40565b9250602084013567ffffffffffffffff81111561524b57600080fd5b61525786828701614fd8565b9497909650939450505050565b60006060820185835260206060602085015281865180845260808601915060808160051b87010193506020880160005b828110156152e0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808887030184526152ce868351614ee8565b95509284019290840190600101615294565b5050505050809150508215156040830152949350505050565b60006020828403121561530b57600080fd5b813561270081615127565b6000806040838503121561532957600080fd5b8235915061533960208401614f40565b90509250929050565b60008060006060848603121561535757600080fd5b83359250614fc860208501614f40565b6000806040838503121561537a57600080fd5b61538383614f40565b9150602083013561539381615127565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156153df5783516001600160a01b0316835292840192918401916001016153ba565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615443576154436153eb565b604052919050565b600067ffffffffffffffff831115615465576154656153eb565b6154786020601f19601f8601160161541a565b905082815283838301111561548c57600080fd5b828260208301376000602084830101529392505050565b600080600080608085870312156154b957600080fd5b6154c285614f40565b93506154d060208601614f40565b925060408501359150606085013567ffffffffffffffff8111156154f357600080fd5b8501601f8101871361550457600080fd5b6155138782356020840161544b565b91505092959194509250565b600082601f83011261553057600080fd5b8135602067ffffffffffffffff82111561554c5761554c6153eb565b8160051b61555b82820161541a565b928352848101820192828101908785111561557557600080fd5b83870192505b8483101561559b5761558c83614f40565b8252918301919083019061557b565b979650505050505050565b6000806000606084860312156155bb57600080fd5b83359250602084013567ffffffffffffffff8111156155d957600080fd5b6155e58682870161551f565b925050604084013561518c81615127565b60008060008060006080868803121561560e57600080fd5b61561786614f40565b9450602086013567ffffffffffffffff81111561563357600080fd5b61563f88828901614fd8565b9095509350615652905060408701614f40565b949793965091946060013592915050565b6000806000806060858703121561567957600080fd5b61568285614f40565b935060208501356fffffffffffffffffffffffffffffffff811681146156a757600080fd5b9250604085013567ffffffffffffffff8111156156c357600080fd5b61507a87828801614fd8565b600080604083850312156156e257600080fd5b6156eb83614f40565b915061533960208401614f40565b600082601f83011261570a57600080fd5b6127008383356020850161544b565b6000806000806000806000806000806101408b8d03121561573957600080fd5b8a3567ffffffffffffffff8082111561575157600080fd5b61575d8e838f016156f9565b9b5060208d013591508082111561577357600080fd5b61577f8e838f016156f9565b9a5060408d013591508082111561579557600080fd5b6157a18e838f016156f9565b99506157af60608e01614f40565b985060808d013597506157c460a08e01614f40565b965060c08d01359150808211156157da57600080fd5b506157e78d828e0161551f565b9450506157f660e08c01615135565b92506158056101008c01614f40565b91506158146101208c01614f40565b90509295989b9194979a5092959850565b600181811c9082168061583957607f821691505b60208210810361288e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6040815260006158856040830186614ee8565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610af257610af26158b8565b600082615934577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000600019820361594c5761594c6158b8565b5060010190565b80820180821115610af257610af26158b8565b81810381811115610af257610af26158b8565b601f8211156113e0576000816000526020600020601f850160051c810160208610156159a25750805b601f850160051c820191505b81811015611cd2578281556001016159ae565b815167ffffffffffffffff8111156159db576159db6153eb565b6159ef816159e98454615825565b84615979565b602080601f831160018114615a245760008415615a0c5750858301515b600019600386901b1c1916600185901b178555611cd2565b600085815260208120601f198616915b82811015615a5357888601518255948401946001909101908401615a34565b5085821015615a715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff831115615ac857615ac86153eb565b615adc83615ad68354615825565b83615979565b6000601f841160018114615b105760008515615af85750838201355b600019600387901b1c1916600186901b178355613c38565b600083815260209020601f19861690835b82811015615b415786850135825560209485019460019092019101615b21565b5086821015615b5e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b604081526000615b836040830185614ee8565b8281036020840152615b958185614ee8565b95945050505050565b600060208284031215615bb057600080fd5b815161270081615127565b6000808454615bc981615825565b60018281168015615be15760018114615bf657615c25565b60ff1984168752821515830287019450615c25565b8860005260208060002060005b85811015615c1c5781548a820152908401908201615c03565b50505082870194505b505050507f2f0000000000000000000000000000000000000000000000000000000000000081528351615c5f816001840160208801614ec4565b01600101949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152615c9d6080830184614ee8565b9695505050505050565b600060208284031215615cb957600080fd5b815161270081614e79565b600081615cd357615cd36158b8565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122017affbcfff405b793e5584c46e94dcb67954e992e289f74a66d2918493c9b49664736f6c634300081600330000000000000000000000000000000000000000000000000000000000000001