[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "CallbackExecutionReverted", "type": "error" }, { "inputs": [], "name": "CallbackFunctionAlreadyInstalled", "type": "error" }, { "inputs": [], "name": "CallbackFunctionNotSupported", "type": "error" }, { "inputs": [], "name": "CallbackFunctionRequired", "type": "error" }, { "inputs": [], "name": "CallbackFunctionUnauthorizedCall", "type": "error" }, { "inputs": [], "name": "FallbackFunctionAlreadyInstalled", "type": "error" }, { "inputs": [], "name": "FallbackFunctionNotInstalled", "type": "error" }, { "inputs": [], "name": "IndexOutOfBounds", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidQueryRange", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "ModuleAlreadyInstalled", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "requiredInterfaceId", "type": "bytes4" } ], "name": "ModuleInterfaceNotCompatible", "type": "error" }, { "inputs": [], "name": "ModuleNotInstalled", "type": "error" }, { "inputs": [], "name": "ModuleOutOfSync", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "NotCompatibleWithSpotMints", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "Reentrancy", "type": "error" }, { "inputs": [], "name": "SequentialMintExceedsLimit", "type": "error" }, { "inputs": [], "name": "SequentialUpToTooSmall", "type": "error" }, { "inputs": [], "name": "SpotMintTokenIdTooSmall", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "implementation", "type": "address" }, { "indexed": false, "internalType": "address", "name": "installedModule", "type": "address" } ], "name": "ModuleInstalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "address", "name": "implementation", "type": "address" }, { "indexed": false, "internalType": "address", "name": "installedModule", "type": "address" } ], "name": "ModuleUninstalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "explicitOwnershipOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721AUpgradeable.TokenOwnership", "name": "ownership", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "explicitOwnershipsOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721AUpgradeable.TokenOwnership[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getInstalledModules", "outputs": [ { "components": [ { "internalType": "address", "name": "implementation", "type": "address" }, { "components": [ { "internalType": "bool", "name": "registerInstallationCallback", "type": "bool" }, { "internalType": "bytes4[]", "name": "requiredInterfaces", "type": "bytes4[]" }, { "internalType": "bytes4[]", "name": "supportedInterfaces", "type": "bytes4[]" }, { "components": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "internalType": "struct IModuleConfig.CallbackFunction[]", "name": "callbackFunctions", "type": "tuple[]" }, { "components": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "internalType": "uint256", "name": "permissionBits", "type": "uint256" } ], "internalType": "struct IModuleConfig.FallbackFunction[]", "name": "fallbackFunctions", "type": "tuple[]" } ], "internalType": "struct IModuleConfig.ModuleConfig", "name": "config", "type": "tuple" } ], "internalType": "struct ICore.InstalledModule[]", "name": "_installedModules", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupportedCallbackFunctions", "outputs": [ { "components": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "internalType": "enum ICore.CallbackMode", "name": "mode", "type": "uint8" } ], "internalType": "struct ICore.SupportedCallbackFunction[]", "name": "supportedCallbackFunctions", "type": "tuple[]" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "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": "_contractURI", "type": "string" }, { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address[]", "name": "_modules", "type": "address[]" }, { "internalType": "bytes[]", "name": "_moduleInstallData", "type": "bytes[]" } ], "name": "initialize", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_module", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "installModule", "outputs": [], "stateMutability": "payable", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "startTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "stop", "type": "uint256" } ], "name": "tokensOfOwnerIn", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_module", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "uninstallModule", "outputs": [], "stateMutability": "payable", "type": "function" } ]
61012060405234801561001157600080fd5b50306080524660a05260608061005c604080518082018252600a815269455243373231436f726560b01b602080830191909152825180840190935260018352603160f81b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152938401929092529082015246606082015230608082015260a0902061010052506100c890506100cd565b61012f565b63409feecd19805460018116156100ec5763f92ee8a96000526004601cfd5b8160c01c808260011c1461012a578060011b8355806020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b505050565b60805160a05160c05160e05161010051615f5361017360003960006137c10152600061387b0152600061385501526000613805015260006137e20152615f536000f3fe6080604052600436106102f25760003560e01c80638462151c1161018f578063c23dc68f116100e1578063eb4ada8a1161008a578063f2fde38b11610064578063f2fde38b14610993578063fe9d9303146109a6578063fee81cf4146109b9576102f2565b8063eb4ada8a1461094b578063f04e283e1461095e578063f147db8a14610971576102f2565b8063e6798baa116100bb578063e6798baa146108ba578063e8a3d485146108ce578063e985e9c5146108e3576102f2565b8063c23dc68f1461085a578063c87b56dd14610887578063d2b04fd6146108a7576102f2565b806395d89b4111610143578063a2309ff81161011d578063a2309ff814610805578063ac9650d81461081a578063b88d4fde14610847576102f2565b806395d89b41146107b057806399a2557a146107c5578063a22cb465146107e5576102f2565b80638da5cb5b116101745780638da5cb5b146107495780638da798da1461077d578063938e3d7b14610790576102f2565b80638462151c146106f457806384b0196e14610721576102f2565b80633e429396116102485780635bbb2177116101fc57806370a08231116101d657806370a08231146106b957806370c109cd146106d9578063715018a6146106ec576102f2565b80635bbb21771461065957806362835ade146106865780636352211e14610699576102f2565b80634a4ee7b11161022d5780634a4ee7b114610607578063514e62fc1461061a57806354d1f13d14610651576102f2565b80633e429396146105d257806342842e0e146105f4576102f2565b8063183a4f6e116102aa57806323b872dd1161028457806323b872dd1461058457806325692962146105975780632de948071461059f576102f2565b8063183a4f6e146105275780631c10893f1461053a5780631cd64df41461054d576102f2565b8063081812fc116102db578063081812fc146104b9578063095ea7b3146104f157806318160ddd14610504576102f2565b806301ffc9a71461046257806306fdde0314610497575b600080357fffffffff00000000000000000000000000000000000000000000000000000000168152600260208181526040808420815160608101835281546001600160a01b03168152600180830154948201949094529381015490929184019160ff9091169081111561036757610367614ad3565b600181111561037857610378614ad3565b90525080519091506001600160a01b03166103bf576040517fb6b8317700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816040015160018111156103d7576103d7614ad3565b0361041a57333014610415576040517f295dcf7800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610455565b60018160400151600181111561043257610432614ad3565b148015610443575060008160200151115b156104555761045581602001516109ec565b805161046090610a3d565b005b34801561046e57600080fd5b5061048261047d366004614b30565b610a78565b60405190151581526020015b60405180910390f35b3480156104a357600080fd5b506104ac610c04565b60405161048e9190614b9d565b3480156104c557600080fd5b506104d96104d4366004614bb0565b610cb8565b6040516001600160a01b03909116815260200161048e565b6104606104ff366004614be0565b610d2b565b34801561051057600080fd5b50610519610d46565b60405190815260200161048e565b610460610535366004614bb0565b610dbc565b610460610548366004614be0565b610dc6565b34801561055957600080fd5b50610482610568366004614be0565b638b78c6d8600c90815260009290925260209091205481161490565b610460610592366004614c0a565b610dd8565b610460610df3565b3480156105ab57600080fd5b506105196105ba366004614c47565b638b78c6d8600c908152600091909152602090205490565b3480156105de57600080fd5b506105e7610e43565b60405161048e9190614d20565b610460610602366004614c0a565b610f6f565b610460610615366004614be0565b610f8a565b34801561062657600080fd5b50610482610635366004614be0565b638b78c6d8600c90815260009290925260209091205416151590565b610460610f9c565b34801561066557600080fd5b50610679610674366004614f27565b610fd8565b60405161048e9190614f69565b610460610694366004615258565b611024565b3480156106a557600080fd5b506104d96106b4366004614bb0565b6110c3565b3480156106c557600080fd5b506105196106d4366004614c47565b6110ce565b6104606106e7366004615395565b61114c565b6104606111bc565b34801561070057600080fd5b5061071461070f366004614c47565b6111d0565b60405161048e919061541a565b34801561072d57600080fd5b5061073661121e565b60405161048e979695949392919061542d565b34801561075557600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927546104d9565b61046061078b366004615395565b6112c7565b34801561079c57600080fd5b506104606107ab3660046154b7565b611331565b3480156107bc57600080fd5b506104ac611342565b3480156107d157600080fd5b506107146107e03660046154ec565b611373565b3480156107f157600080fd5b5061046061080036600461552d565b611380565b34801561081157600080fd5b50610519611395565b34801561082657600080fd5b5061083a610835366004614f27565b6113a4565b60405161048e9190615564565b6104606108553660046155db565b611425565b34801561086657600080fd5b5061087a610875366004614bb0565b611479565b60405161048e9190615643565b34801561089357600080fd5b506104ac6108a2366004614bb0565b611513565b6104606108b5366004615688565b61151e565b3480156108c657600080fd5b506000610519565b3480156108da57600080fd5b506104ac611584565b3480156108ef57600080fd5b506104826108fe366004615717565b6001600160a01b0391821660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832093909416825291909152205460ff1690565b61046061095936600461574a565b611593565b61046061096c366004614c47565b6116bc565b34801561097d57600080fd5b506109866116f9565b60405161048e9190615804565b6104606109a1366004614c47565b6119f4565b6104606109b43660046158a5565b611a1b565b3480156109c557600080fd5b506105196109d4366004614c47565b63389a75e1600c908152600091909152602090205490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610a3a57638b78c6d8600c5233600052806020600c205416610a3a576382b429006000526004601cfd5b50565b6040805136810190915236600082376000803683855af49050610a663d60408051918201905290565b3d6000823e81610a74573d81fd5b3d81f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610b0b57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610b5757507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610ba357507fe8a3d485000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610bef57507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610bfe5750610bfe82611a31565b92915050565b60607f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c406002018054610c35906158d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610c61906158d8565b8015610cae5780601f10610c8357610100808354040283529160200191610cae565b820191906000526020600020905b815481529060010190602001808311610c9157829003601f168201915b5050505050905090565b6000610cc382611afd565b610cf057610cf07fcf4700e400000000000000000000000000000000000000000000000000000000611b98565b5060009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4660205260409020546001600160a01b031690565b610d383383836001611ba2565b610d428282611c59565b5050565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c41547f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405403600019805b14610db9577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4854015b90565b610a3a3382611c65565b610dce611c71565b610d428282611ca7565b610de3838383611cb3565b610dee838383611d61565b505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b60606000610e516000612040565b90508067ffffffffffffffff811115610e6c57610e6c614ff2565b604051908082528060200260200182016040528015610ea557816020015b610e92614a7f565b815260200190600190039081610e8a5790505b50915060005b81811015610f6a576000610ebf8183612092565b90506040518060400160405280826001600160a01b03168152602001826001600160a01b03166389e04e0e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f419190810190615aab565b815250848381518110610f5657610f56615bb1565b602090810291909101015250600101610eab565b505090565b610dee83838360405180602001604052806000815250611425565b610f92611c71565b610d428282611c65565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60408051828152600583901b8082016020019092526060915b801561101c57601f198082019186010135600061100d82611479565b8484016020015250610ff19050565b509392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf60113280546003825580156110765760018160011c14303b1061106d5763f92ee8a96000526004601cfd5b818160ff1b1b91505b50611085878787878787612105565b80156110ba576002815560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a15b50505050505050565b6000610bfe82612341565b60006001600160a01b038216611107576111077f8f4eb60400000000000000000000000000000000000000000000000000000000611b98565b506001600160a01b031660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c45602052604090205467ffffffffffffffff1690565b7f8000000000000000000000000000000000000000000000000000000000000000611176816109ec565b6111b68484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124b092505050565b50505050565b6111c4611c71565b6111ce60006128a4565b565b60606000806111fd7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405490565b90506060818314611216576112138584846128fd565b90505b949350505050565b7f0f0000000000000000000000000000000000000000000000000000000000000060608060008080836112b5604080518082018252600a81527f455243373231436f7265000000000000000000000000000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b7f80000000000000000000000000000000000000000000000000000000000000006112f1816109ec565b6111b68484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a3892505050565b611339611c71565b610a3a816131b6565b60607f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c406003018054610c35906158d8565b60606112168484846128fd565b61138b3383836131ef565b610d428282613297565b600061139f613340565b905090565b6060602060005281602052816113ba5760406000f35b60408260051b8085604037818101905b82518601604082018135602083018237600038833583305af46113f1573d6000803e3d6000fd5b8285526020850194503d81523d6000602083013e50503d01603f0167ffffffffffffffe0168183106113ca57604081016000f35b611430848484610dd8565b6001600160a01b0383163b156111b65761144c8484848461336b565b6111b6576111b67fd1a57ed600000000000000000000000000000000000000000000000000000000611b98565b6040805160808101825260008082526020820181905291810182905260608101919091527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405482101561150e575b60008281527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604090205461150557600019909101906114c7565b610bfe826134b0565b919050565b6060610bfe8261356c565b60006115487f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405490565b9050831561155d5761155d8782888888613609565b61156a878288868661368a565b6110ba87876040518060200160405280600081525061370b565b606060038054610c35906158d8565b6000611648826116427f8a6f0502097f21aeafa7bce80674ae1009f677eb83c3c815e4c35ef6f64c85298b8b8b8b6040516115cf929190615be0565b60405180910390208a8a6040516115e7929190615be0565b60405190819003812061162795949392916020019485526001600160a01b0393909316602085015260408401919091526060830152608082015260a00190565b604051602081830303815290604052805190602001206137bf565b906138d7565b905060006116747f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405490565b905085156116895761168989828a8a8a613609565b61169789828a888887613981565b6116b189896040518060200160405280600081525061370b565b505050505050505050565b6116c4611c71565b63389a75e1600c52806000526020600c2080544211156116ec57636f5e88186000526004601cfd5b60009055610a3a816128a4565b6040805160088082526101208201909252606091816020015b604080518082019091526000808252602082015281526020019060019003908161171257905050604080518082019091527f765e80930000000000000000000000000000000000000000000000000000000081529091506020810160018152508160008151811061178557611785615bb1565b602090810291909101810191909152604080518082019091527f0daf93280000000000000000000000000000000000000000000000000000000081529081016001815250816001815181106117dc576117dc615bb1565b602090810291909101810191909152604080518082019091527f1b9e8fe400000000000000000000000000000000000000000000000000000000815290810160008152508160028151811061183357611833615bb1565b602090810291909101810191909152604080518082019091527fb616171d00000000000000000000000000000000000000000000000000000000815290810160008152508160038151811061188a5761188a615bb1565b602090810291909101810191909152604080518082019091527f1269be020000000000000000000000000000000000000000000000000000000081529081016000815250816004815181106118e1576118e1615bb1565b602090810291909101810191909152604080518082019091527f61f4ada900000000000000000000000000000000000000000000000000000000815290810160008152508160058151811061193857611938615bb1565b602090810291909101810191909152604080518082019091527fcfc0cb9600000000000000000000000000000000000000000000000000000000815290810160018152508160068151811061198f5761198f615bb1565b602090810291909101810191909152604080518082019091527f2d09334d0000000000000000000000000000000000000000000000000000000081529081016001815250816007815181106119e6576119e6615bb1565b602002602001018190525090565b6119fc611c71565b8060601b611a1257637448fbae6000526004601cfd5b610a3a816128a4565b611a26838383613a0e565b610dee836001613a8b565b60007fffffffff000000000000000000000000000000000000000000000000000000008083169003611a6557506000919050565b7fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000003611ab657506001919050565b7fffffffff00000000000000000000000000000000000000000000000000000000821660009081526001602052604090205415611af557506001919050565b506000919050565b60007f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405482101561150e5760005b5060008281527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604081205490819003611b7257611b6b83615c1f565b9250611b2b565b7c0100000000000000000000000000000000000000000000000000000000161592915050565b8060005260046000fd5b6040516001600160a01b03808616602483015284166044820152606481018390528115156084820152611c51907f1269be02000000000000000000000000000000000000000000000000000000009060a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1269be0200000000000000000000000000000000000000000000000000000000179052613d2d565b505050505050565b610d4282826001613fe5565b610d4282826000614114565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146111ce576382b429006000526004601cfd5b610d4282826001614114565b6040516001600160a01b0380851660248301528316604482015260648101829052611d5a907f1b9e8fe4000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1b9e8fe400000000000000000000000000000000000000000000000000000000179052613d2d565b5050505050565b6000611d6c82612341565b6001600160a01b039485169490915081168414611dac57611dac7fa114810000000000000000000000000000000000000000000000000000000000611b98565b60008281527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604090208054611df78187335b6001600160a01b039081169116811491141790565b611e6e576001600160a01b03861660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832033845290915290205460ff16611e6e57611e6e7f59c896be00000000000000000000000000000000000000000000000000000000611b98565b8015611e7957600082555b6001600160a01b0386811660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4560205260408082208054600019019055918716808252919020805460010190554260a01b177c02000000000000000000000000000000000000000000000000000000001760008581527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003611fd8576001840160008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120549003611fd6577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40548114611fd65760008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48060000361203b5761203b7fea553b3400000000000000000000000000000000000000000000000000000000611b98565b6110ba565b63978aab9260045260008181526024812080548060a01b60a01c8060011c9350808260601c151761208a5760019350838301541561208a5760029350838301541561208a57600393505b505050919050565b63978aab926004526000828152602481208281015460601c915068fbb67fda52d4bfb8bf821415820291506120c684612040565b83106120fe576040517f4e23d03500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5092915050565b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f54610100900460ff1661215e577fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f5460ff1615612162565b303b155b6121f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a656400000000000000000060648201526084015b60405180910390fd5b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f54610100900460ff16158015612270577fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b61227a878761416d565b612283856131b6565b61228c8461422d565b815183511461229a57600080fd5b60005b83518110156122ea576122e28482815181106122bb576122bb615bb1565b60200260200101518483815181106122d5576122d5615bb1565b6020026020010151612a38565b60010161229d565b5080156110ba5750507fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050505050565b60008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260409020548060000361245b577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405482106123c8576123c87fdf2d9b4200000000000000000000000000000000000000000000000000000000611b98565b506000190160008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604090205480156123c8577c0100000000000000000000000000000000000000000000000000000000811660000361242d57919050565b6124567fdf2d9b4200000000000000000000000000000000000000000000000000000000611b98565b6123c8565b7c0100000000000000000000000000000000000000000000000000000000811660000361248757919050565b61150e7fdf2d9b4200000000000000000000000000000000000000000000000000000000611b98565b6124bb600083614284565b6124f1576040517f2a6f792900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03166389e04e0e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612531573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125599190810190615aab565b60408101515190915060005b818110156125f85760018060008560400151848151811061258857612588615bb1565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008282546125eb9190615c36565b9091555050600101612565565b5060808201515160005b818110156126c157600260008560800151838151811061262457612624615bb1565b602090810291909101810151517fffffffff00000000000000000000000000000000000000000000000000000000168252810191909152604001600090812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018082019290925560020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905501612602565b5060608301515160005b8181101561278a5760026000866060015183815181106126ed576126ed615bb1565b602090810291909101810151517fffffffff00000000000000000000000000000000000000000000000000000000168252810191909152604001600090812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560018082019290925560020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055016126cb565b5083511561285457856001600160a01b0316856040516024016127ad9190614b9d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8a91b0e300000000000000000000000000000000000000000000000000000000179052516128109190615c49565b600060405180830381855af49150503d806000811461284b576040519150601f19603f3d011682016040523d82523d6000602084013e612850565b606091505b5050505b604080513381526001600160a01b038816602082018190528183015290517fef3b2e20acbb62d61d782c5449bd73d3970cb9be1050a6ad6f846b2cbe21c03a9181900360600190a1505050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392780546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b606081831061292f5761292f7f32c1995a00000000000000000000000000000000000000000000000000000000611b98565b60006129597f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405490565b905080808410612967578093505b6000612972876110ce565b905084861061297f575060005b8015612a2e57808686031161299357508484035b604080516001830160051b810191829052945060006129b188611479565b9050600081604001516129c2575080515b60005b6129ce8a6134b0565b92506040830151600081146129e65760009250612a0b565b8351156129f257835192505b8b831860601b612a0b576001820191508a8260051b8a01525b5060018a01995083604052888a1480612a2357508481145b156129c55787525050505b5050509392505050565b612a436000836143e5565b612a79576040517f24c377e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03166389e04e0e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612ab9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ae19190810190615aab565b9050806020015151600014612bad5760005b816020015151811015612bab57612b2682602001518281518110612b1957612b19615bb1565b6020026020010151610a78565b612ba35781602001518181518110612b4057612b40615bb1565b60200260200101516040517f56ba3a7f0000000000000000000000000000000000000000000000000000000081526004016121ea91907fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b600101612af3565b505b60408101515160005b81811015612c4957600180600085604001518481518110612bd957612bd9615bb1565b60200260200101517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206000828254612c3c9190615c65565b9091555050600101612bb6565b506000612c546116f9565b80516060850151519192509060005b81811015612ec457600086606001518281518110612c8357612c83615bb1565b60209081029190910181015180517fffffffff0000000000000000000000000000000000000000000000000000000016600090815260029092526040909120549091506001600160a01b031615612d06576040517f4cc04b1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b85811015612d895782600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916878281518110612d4857612d48615bb1565b6020026020010151600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603612d815760019150612d89565b600101612d0a565b5080612dc1576040517fae7ff83e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180606001604052808b6001600160a01b031681526020016000815260200160006001811115612df557612df5614ad3565b905282517fffffffff0000000000000000000000000000000000000000000000000000000016600090815260026020818152604092839020845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390911617815590840151600180830191909155928401519181018054919390917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115612eaf57612eaf614ad3565b02179055505060019093019250612c63915050565b5060808501515160005b8181101561306457600087608001518281518110612eee57612eee615bb1565b60209081029190910181015180517fffffffff0000000000000000000000000000000000000000000000000000000016600090815260029092526040909120549091506001600160a01b031615612f71576040517f92bffc6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060810182526001600160a01b038c168152602083810151908201529081016001905281517fffffffff0000000000000000000000000000000000000000000000000000000016600090815260026020818152604092839020845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390911617815590840151600180830191909155928401519181018054919390917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690838181111561305057613050614ad3565b02179055505060019092019150612ece9050565b5085511561316457600080896001600160a01b03168960405160240161308a9190614b9d565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6d61fe7000000000000000000000000000000000000000000000000000000000179052516130ed9190615c49565b600060405180830381855af49150503d8060008114613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b606091505b50915091508161316157613161817f3fcb90450000000000000000000000000000000000000000000000000000000061454f565b50505b604080513381526001600160a01b038a16602082018190528183015290517fbcd03fe408dcc45614e803cbab9f500dddff61b17380b993e76d30398da472299181900360600190a15050505050505050565b60036131c28282615cbf565b506040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a150565b6040516001600160a01b038085166024830152831660448201528115156064820152611d5a907f61f4ada9000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f61f4ada900000000000000000000000000000000000000000000000000000000179052613d2d565b3360008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c47602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405460001980610d90565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081526000906001600160a01b0385169063150b7a02906133b9903390899088908890600401615d7e565b6020604051808303816000875af19250505080156133f4575060408051601f3d908101601f191682019092526133f191810190615dbf565b60015b613462573d808015613422576040519150601f19603f3d011682016040523d82523d6000602084013e613427565b606091505b50805160000361345a5761345a7fd1a57ed600000000000000000000000000000000000000000000000000000000611b98565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b604080516080810182526000808252602082018190529181018290526060810191909152610bfe7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4060008481526004919091016020526040902054604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff1660208201527c0100000000000000000000000000000000000000000000000000000000831615159181019190915260e89190911c606082015290565b606060006135eb63cfc0cb9660e01b8460405160240161358e91815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcfc0cb9600000000000000000000000000000000000000000000000000000000179052614568565b915050808060200190518101906136029190615ddc565b9392505050565b6110ba632d09334d60e01b868686868660405160240161362d959493929190615e7e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2d09334d00000000000000000000000000000000000000000000000000000000179052613d2d565b6110ba63765e809360e01b86868686866040516024016136ae959493929190615e7e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f765e809300000000000000000000000000000000000000000000000000000000179052613d2d565b61371583836147db565b6001600160a01b0383163b15610dee577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40548281035b61375e600086838060010194508661336b565b61378b5761378b7fd1a57ed600000000000000000000000000000000000000000000000000000000611b98565b81811061374b57817f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405414611d5a57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f00000000000000000000000000000000000000000000000000000000000000004614166138b25750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b604051600190836000526020830151604052604083510361392c57604083015160ff81901c601b016020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16606052613952565b604183510361394d57606083015160001a6020526040830151606052613952565b600091505b6020600160806000855afa5191503d61397357638baa579f6000526004601cfd5b600060605260405292915050565b613a04630daf932860e01b8787878787876040516024016139a796959493929190615eb8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0daf932800000000000000000000000000000000000000000000000000000000179052613d2d565b5050505050505050565b611d5a63b616171d60e01b848484604051602401613a2e93929190615f03565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb616171d00000000000000000000000000000000000000000000000000000000179052613d2d565b6000613a9683612341565b905080600080613ad38660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c466020526040902080549091565b915091508415613b5f57613ae8818433611de2565b613b5f576001600160a01b03831660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832033845290915290205460ff16613b5f57613b5f7f59c896be00000000000000000000000000000000000000000000000000000000611b98565b8015613b6a57600082555b6001600160a01b03831660008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c456020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c03000000000000000000000000000000000000000000000000000000001760008781527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120919091557c020000000000000000000000000000000000000000000000000000000085169003613cc5576001860160008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4460205260408120549003613cc3577f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40548114613cc35760008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450507f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c418054600101905550505050565b600060603068929eee149b4bd212685403613d505763ab143c066000526004601cfd5b3068929eee149b4bd21268557fffffffff0000000000000000000000000000000000000000000000000000000084166000908152600260208181526040808420815160608101835281546001600160a01b03168152600180830154948201949094529381015490929184019160ff90911690811115613dd157613dd1614ad3565b6001811115613de257613de2614ad3565b9052509050600081604001516001811115613dff57613dff614ad3565b14613e36576040517fae7ff83e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b031615613edc5780600001516001600160a01b031684604051613e629190615c49565b600060405180830381855af49150503d8060008114613e9d576040519150601f19603f3d011682016040523d82523d6000602084013e613ea2565b606091505b50909350915082613ed757613ed7827f3fcb90450000000000000000000000000000000000000000000000000000000061454f565b613fd1565b6000613ee66116f9565b805190915060005b81811015613fcd57877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916838281518110613f2857613f28615bb1565b6020026020010151600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603613fc5576001838281518110613f6c57613f6c615bb1565b6020026020010151602001516001811115613f8957613f89614ad3565b03613fc0576040517f2d51781900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fcd565b600101613eee565b5050505b503868929eee149b4bd21268559250929050565b6000613ff0836110c3565b90508180156140085750336001600160a01b03821614155b15614080576001600160a01b03811660009081527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c476020908152604080832033845290915290205460ff16614080576140807fcfb3b94200000000000000000000000000000000000000000000000000000000611b98565b60008381527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c46602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b638b78c6d8600c52826000526020600c20805483811783614136575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a3505050505050565b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f54610100900460ff16614223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f206973206e6f7420696e697469616c697a696e6700000000000000000000000060648201526084016121ea565b610d428282614949565b6001600160a01b03167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b63978aab926004526000828152602481206001600160a01b0392909216917fffffffffffffffffffffffffffffffffffffffffffffff04498025ad2b40474183016142d75763f5a267f16000526004601cfd5b826142e95768fbb67fda52d4bfb8bf92505b80546bffffffffffffffffffffffff81168061436c5760019350848260601c03614327576001830180548455600284018054909155600090556143dc565b84600184015460601c03614349576002830180546001850155600090556143dc565b84600284015460601c0361436357600060028401556143dc565b600093506143dc565b826020528460005260406000208054806143875750506143dc565b60018360011c0392508260018203146143bf578285015460601c8060601b600183038701556000848701558060005250806040600020555b5060018260011b17845460601c60601b1784556000815550600193505b50505092915050565b63978aab926004526000828152602481206001600160a01b0392909216917fffffffffffffffffffffffffffffffffffffffffffffff04498025ad2b40474183016144385763f5a267f16000526004601cfd5b8261444a5768fbb67fda52d4bfb8bf92505b80546bffffffffffffffffffffffff81168260205280614512578160601c8061447d578560601b845560019450506143dc565b85810361448a57506143dc565b600184015460601c806144ab578660601b60018601556001955050506143dc565b8681036144b95750506143dc565b600285015460601c806144db578760601b6002870155600196505050506143dc565b8781036144ea575050506143dc565b6000928352604080842060019055918352818320600290558252902060039055506007908117905b8460005260406000208054614545578160011c91508560601b8285015581600101815582600201845560019450506143dc565b5050505092915050565b81511561455e57815182602001fd5b806000526004601cfd5b7fffffffff000000000000000000000000000000000000000000000000000000008216600090815260026020818152604080842081516060818101845282546001600160a01b0316825260018084015495830195909552948201548694919384019160ff909116908111156145df576145df614ad3565b60018111156145f0576145f0614ad3565b905250905060008160400151600181111561460d5761460d614ad3565b14614644576040517fae7ff83e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516001600160a01b0316156146de576040513090614664908690615c49565b600060405180830381855afa9150503d806000811461469f576040519150601f19603f3d011682016040523d82523d6000602084013e6146a4565b606091505b509093509150826146d9576146d9827f3fcb90450000000000000000000000000000000000000000000000000000000061454f565b6147d3565b60006146e86116f9565b805190915060005b818110156147cf57877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191683828151811061472a5761472a615bb1565b6020026020010151600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036147c757600183828151811061476e5761476e615bb1565b602002602001015160200151600181111561478b5761478b614ad3565b036147c2576040517f2d51781900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6147cf565b6001016146f0565b5050505b509250929050565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4054600082900361482f5761482f7fb562e8dd00000000000000000000000000000000000000000000000000000000611b98565b60008181527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c44602090815260408083206001600160a01b0387164260a01b6001881460e11b1781179091558084527f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4590925282208054680100000000000000018602019055908190036148e5576148e57f2e07630000000000000000000000000000000000000000000000000000000000611b98565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081036148ea57507f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c405550505050565b7fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85f54610100900460ff166149ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f206973206e6f7420696e697469616c697a696e6700000000000000000000000060648201526084016121ea565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c42614a2a8382615cbf565b507f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c43614a568282615cbf565b5060007f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c40555050565b604051806040016040528060006001600160a01b03168152602001614ace6040518060a00160405280600015158152602001606081526020016060815260200160608152602001606081525090565b905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610a3a57600080fd5b600060208284031215614b4257600080fd5b813561360281614b02565b60005b83811015614b68578181015183820152602001614b50565b50506000910152565b60008151808452614b89816020860160208601614b4d565b601f01601f19169290920160200192915050565b6020815260006136026020830184614b71565b600060208284031215614bc257600080fd5b5035919050565b80356001600160a01b038116811461150e57600080fd5b60008060408385031215614bf357600080fd5b614bfc83614bc9565b946020939093013593505050565b600080600060608486031215614c1f57600080fd5b614c2884614bc9565b9250614c3660208501614bc9565b929592945050506040919091013590565b600060208284031215614c5957600080fd5b61360282614bc9565b600081518084526020840193506020830160005b82811015614cb65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101614c76565b5093949350505050565b600081518084526020840193506020830160005b82811015614cb657815180517fffffffff000000000000000000000000000000000000000000000000000000001687526020908101518188015260409096019590910190600101614cd4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015614ecf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152805115156040870152602081015160a06060880152614db660e0880182614c62565b905060408201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888303016080890152614df18282614c62565b60608401518982037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00160a08b0152805180835260209182019450600093509101905b80831015614e7a577fffffffff00000000000000000000000000000000000000000000000000000000845151168252602082019150602084019350600183019250614e34565b50608084015193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08982030160c08a0152614eb68185614cc0565b9850505060209586019593909301925050600101614d48565b50929695505050505050565b60008083601f840112614eed57600080fd5b50813567ffffffffffffffff811115614f0557600080fd5b6020830191508360208260051b8501011115614f2057600080fd5b9250929050565b60008060208385031215614f3a57600080fd5b823567ffffffffffffffff811115614f5157600080fd5b614f5d85828601614edb565b90969095509350505050565b602080825282518282018190526000918401906040840190835b81811015614fe757614fd18385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b6020939093019260809290920191600101614f83565b509095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516020810167ffffffffffffffff8111828210171561504457615044614ff2565b60405290565b6040805190810167ffffffffffffffff8111828210171561504457615044614ff2565b60405160a0810167ffffffffffffffff8111828210171561504457615044614ff2565b604051601f8201601f1916810167ffffffffffffffff811182821017156150b9576150b9614ff2565b604052919050565b600067ffffffffffffffff8211156150db576150db614ff2565b50601f01601f191660200190565b600082601f8301126150fa57600080fd5b813560208301600061511361510e846150c1565b615090565b905082815285838301111561512757600080fd5b82826020830137600092810160200192909252509392505050565b600067ffffffffffffffff82111561515c5761515c614ff2565b5060051b60200190565b600082601f83011261517757600080fd5b813561518561510e82615142565b8082825260208201915060208360051b8601019250858311156151a757600080fd5b602085015b838110156151cb576151bd81614bc9565b8352602092830192016151ac565b5095945050505050565b600082601f8301126151e657600080fd5b81356151f461510e82615142565b8082825260208201915060208360051b86010192508583111561521657600080fd5b602085015b838110156151cb57803567ffffffffffffffff81111561523a57600080fd5b615249886020838a01016150e9565b8452506020928301920161521b565b60008060008060008060c0878903121561527157600080fd5b863567ffffffffffffffff81111561528857600080fd5b61529489828a016150e9565b965050602087013567ffffffffffffffff8111156152b157600080fd5b6152bd89828a016150e9565b955050604087013567ffffffffffffffff8111156152da57600080fd5b6152e689828a016150e9565b9450506152f560608801614bc9565b9250608087013567ffffffffffffffff81111561531157600080fd5b61531d89828a01615166565b92505060a087013567ffffffffffffffff81111561533a57600080fd5b61534689828a016151d5565b9150509295509295509295565b60008083601f84011261536557600080fd5b50813567ffffffffffffffff81111561537d57600080fd5b602083019150836020828501011115614f2057600080fd5b6000806000604084860312156153aa57600080fd5b6153b384614bc9565b9250602084013567ffffffffffffffff8111156153cf57600080fd5b6153db86828701615353565b9497909650939450505050565b600081518084526020840193506020830160005b82811015614cb65781518652602095860195909101906001016153fc565b60208152600061360260208301846153e8565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e06020820152600061546860e0830189614b71565b828103604084015261547a8189614b71565b90508660608401526001600160a01b03861660808401528460a084015282810360c08401526154a981856153e8565b9a9950505050505050505050565b6000602082840312156154c957600080fd5b813567ffffffffffffffff8111156154e057600080fd5b611216848285016150e9565b60008060006060848603121561550157600080fd5b61550a84614bc9565b95602085013595506040909401359392505050565b8015158114610a3a57600080fd5b6000806040838503121561554057600080fd5b61554983614bc9565b915060208301356155598161551f565b809150509250929050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015614ecf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526155c6858351614b71565b9450602093840193919091019060010161558c565b600080600080608085870312156155f157600080fd5b6155fa85614bc9565b935061560860208601614bc9565b925060408501359150606085013567ffffffffffffffff81111561562b57600080fd5b615637878288016150e9565b91505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff169082015260808101610bfe565b600080600080600080608087890312156156a157600080fd5b6156aa87614bc9565b955060208701359450604087013567ffffffffffffffff8111156156cd57600080fd5b6156d989828a01615353565b909550935050606087013567ffffffffffffffff8111156156f957600080fd5b61570589828a01615353565b979a9699509497509295939492505050565b6000806040838503121561572a57600080fd5b61573383614bc9565b915061574160208401614bc9565b90509250929050565b600080600080600080600060a0888a03121561576557600080fd5b61576e88614bc9565b965060208801359550604088013567ffffffffffffffff81111561579157600080fd5b61579d8a828b01615353565b909650945050606088013567ffffffffffffffff8111156157bd57600080fd5b6157c98a828b01615353565b909450925050608088013567ffffffffffffffff8111156157e957600080fd5b6157f58a828b016150e9565b91505092959891949750929550565b602080825282518282018190526000918401906040840190835b81811015614fe757835180517fffffffff000000000000000000000000000000000000000000000000000000001684526020015160028110615889577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602084810191909152939093019260409092019160010161581e565b6000806000604084860312156158ba57600080fd5b83359250602084013567ffffffffffffffff8111156153cf57600080fd5b600181811c908216806158ec57607f821691505b602082108103615925577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b805161150e8161551f565b600082601f83011261594757600080fd5b815161595561510e82615142565b8082825260208201915060208360051b86010192508583111561597757600080fd5b602085015b838110156151cb57805161598f81614b02565b83526020928301920161597c565b600082601f8301126159ae57600080fd5b81516159bc61510e82615142565b8082825260208201915060208360051b8601019250858311156159de57600080fd5b602085015b838110156151cb57602081880312156159fb57600080fd5b615a03615021565b8151615a0e81614b02565b81528352602092830192016159e3565b600082601f830112615a2f57600080fd5b8151615a3d61510e82615142565b8082825260208201915060208360061b860101925085831115615a5f57600080fd5b602085015b838110156151cb5760408188031215615a7c57600080fd5b615a8461504a565b8151615a8f81614b02565b8152602082810151818301529084529290920191604001615a64565b600060208284031215615abd57600080fd5b815167ffffffffffffffff811115615ad457600080fd5b820160a08185031215615ae657600080fd5b615aee61506d565b615af78261592b565b8152602082015167ffffffffffffffff811115615b1357600080fd5b615b1f86828501615936565b602083015250604082015167ffffffffffffffff811115615b3f57600080fd5b615b4b86828501615936565b604083015250606082015167ffffffffffffffff811115615b6b57600080fd5b615b778682850161599d565b606083015250608082015167ffffffffffffffff811115615b9757600080fd5b615ba386828501615a1e565b608083015250949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081615c2e57615c2e615bf0565b506000190190565b81810381811115610bfe57610bfe615bf0565b60008251615c5b818460208701614b4d565b9190910192915050565b80820180821115610bfe57610bfe615bf0565b601f821115610dee57806000526020600020601f840160051c81016020851015615c9f5750805b601f840160051c820191505b81811015611d5a5760008155600101615cab565b815167ffffffffffffffff811115615cd957615cd9614ff2565b615ced81615ce784546158d8565b84615c78565b6020601f821160018114615d215760008315615d095750848201515b600019600385901b1c1916600184901b178455611d5a565b600084815260208120601f198516915b82811015615d515787850151825560209485019460019092019101615d31565b5084821015615d6f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615db56080830184614b71565b9695505050505050565b600060208284031215615dd157600080fd5b815161360281614b02565b600060208284031215615dee57600080fd5b815167ffffffffffffffff811115615e0557600080fd5b8201601f81018413615e1657600080fd5b8051615e2461510e826150c1565b818152856020838501011115615e3957600080fd5b615e4a826020830160208601614b4d565b95945050505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0386168152846020820152836040820152608060608201526000615ead608083018486615e53565b979650505050505050565b6001600160a01b038716815285602082015284604082015260a060608201526000615ee760a083018587615e53565b90506001600160a01b0383166080830152979650505050505050565b838152604060208201526000615e4a604083018486615e5356fea2646970667358221220e58d21fcc40eeacbf5cc47e99cd141cd759920dad11e0b6d72b9d8b5092db4c364736f6c634300081a0033