[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "BondingCurveNotReady", "type": "error" }, { "inputs": [], "name": "CannotSellClaimedTokens", "type": "error" }, { "inputs": [], "name": "ErrorAddingLiquidity", "type": "error" }, { "inputs": [], "name": "ExceedsLimit", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InsufficientETHInContract", "type": "error" }, { "inputs": [], "name": "InvalidAction", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [], "name": "ProposalActive", "type": "error" }, { "inputs": [], "name": "TradingInactive", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ClaimViaNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "voter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DepositForVotes", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DepositNFT", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "affiliate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountSent", "type": "uint256" } ], "name": "Referral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "TimerOn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ToggleBurning", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ToggleClaiming", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "percentSold", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "poolAmount", "type": "uint256" } ], "name": "VotingEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "voter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawDeposit", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ERC721exFactory", "outputs": [ { "internalType": "contract IERC721exFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LogicLibRole", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NFTContract", "outputs": [ { "internalType": "contract IERC721A", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "remaining", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondingCurveContract", "outputs": [ { "internalType": "contract IBondingCurveLib", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burnNFTForTokens", "outputs": [ { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "burningDisabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minTokensAccepted", "type": "uint256" }, { "internalType": "uint256", "name": "_referralNFT", "type": "uint256" } ], "name": "buyTokens", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "calculateCurrentBuyPrice", "outputs": [ { "internalType": "uint256", "name": "currentPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculateCurvePercentage", "outputs": [ { "internalType": "uint256", "name": "percentageSold", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculateETHReturned", "outputs": [ { "internalType": "uint256", "name": "maxSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "currentPricePertoken", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calculateMaxOrderSize", "outputs": [ { "internalType": "uint256", "name": "maxBuyAmount", "type": "uint256" }, { "internalType": "uint256", "name": "maxSlippage", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimAndBurnReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "claimWithNFT", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "claimedNFTs", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimingDisabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "closingTimer", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" } ], "name": "createPoolAndAddLiquidity", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deployedTime", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_voter", "type": "address" } ], "name": "depositTokensToVote", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "depositedTokensToVote", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" } ], "name": "executePoolSplit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factoryAddress", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMINandPMAX", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint8", "name": "action", "type": "uint8" } ], "name": "giveReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newUser", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "_NFTContract", "type": "address" }, { "internalType": "uint256", "name": "maxSupplyTokens", "type": "uint256" }, { "internalType": "address", "name": "_bondingCurveContract", "type": "address" }, { "internalType": "address", "name": "_logicLibAddress", "type": "address" }, { "internalType": "address", "name": "deployer", "type": "address" } ], "name": "initialize", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "maxSupplyOfTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolSplitVote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "referredNFTs", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "_minETHAccepted", "type": "uint256" } ], "name": "sellTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_logicLibAddress", "type": "address" } ], "name": "setLogicLibAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supplyLeft", "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": "proposal_id", "type": "uint256" } ], "name": "toggleBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposal_id", "type": "uint256" } ], "name": "toggleClaim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokensFromBurnedNFTs", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "tokensFromClaimedNFTs", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokensSold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tradingLive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "curve", "type": "address" } ], "name": "updateBondingCurve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "votingContract", "outputs": [ { "internalType": "contract ILogicLib", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "votingLive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "proposalId", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdrawVotedTokens", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
608060405234801561000f575f80fd5b5060018055600480546001600160a01b03191633179055614088806100335f395ff3fe608060405260043610610375575f3560e01c806352236ccc116101ce57806395d89b4111610100578063d547741f11610099578063ea58c3221161006b578063ea58c32214610a8f578063ed9772b614610ac5578063fdcf9d0714610ae4578063fe3dbd8114610af957005b8063d547741f14610a1f578063da452c0414610a3e578063dd62ed3e14610a5d578063e995e73514610a7c57005b8063a9059cbb116100d2578063a9059cbb146109ae578063b67ae790146109cd578063c1fc006a146109e1578063c577044014610a0057005b806395d89b4114610949578063966dae0e1461095d578063a217fddf1461097c578063a457c2d71461098f57005b806370a08231116101725780637b61d526116101445780637b61d526146108cd5780638ffdae03146108ec57806391534e571461090b57806391d148541461092a57005b806370a0823114610847578063771ab9011461087b5780637975ce281461088f57806379b1abef146108a257005b80635921a139116101ab5780635921a139146107cb5780636dff509c146107ea5780636e1f1320146108155780636ece866c1461083357005b806352236ccc1461077857806352a606581461079757806353495730146107ac57005b80632637af31116102a757806336568abe1161024b57806345ccb95a1161021d57806345ccb95a146106fd578063461ac019146107125780634950659414610735578063518ab2a81461076357005b806336568abe14610666578063389776861461068557806339509351146106a4578063405f79be146106c357005b80632f2ff15d116102845780632f2ff15d146105f4578063313ce5671461061357806331c2273b1461062757806332b9de9a1461064657005b80632637af31146105975780632a0ad129146105b65780632e1a7d4d146105d557005b80631e536e89116103195780632298a818116102eb5780632298a8181461050c57806323ab75141461052b57806323b872dd1461054a578063248a9ca31461056957005b80631e536e89146104785780631f2c4dd2146104985780631f367761146104cf5780632024e605146104f857005b8063095ea7b311610352578063095ea7b31461040c57806311704f521461042b57806316942cb31461044457806318160ddd1461046357005b806301ffc9a71461037e57806306fdde03146103b25780630890a99b146103d357005b3661037c57005b005b348015610389575f80fd5b5061039d6103983660046138fb565b610b1a565b60405190151581526020015b60405180910390f35b3480156103bd575f80fd5b506103c6610b5f565b6040516103a99190613922565b3480156103de575f80fd5b506103fe6103ed366004613981565b60136020525f908152604090205481565b6040519081526020016103a9565b348015610417575f80fd5b5061039d61042636600461399c565b610beb565b348015610436575f80fd5b5060035461039d9060ff1681565b34801561044f575f80fd5b506103fe61045e3660046139c6565b610c00565b34801561046e575f80fd5b506103fe600b5481565b348015610483575f80fd5b506103fe5f8051602061401383398151915281565b3480156104a3575f80fd5b506006546104b7906001600160a01b031681565b6040516001600160a01b0390911681526020016103a9565b3480156104da575f80fd5b506104e3610ec2565b604080519283526020830191909152016103a9565b348015610503575f80fd5b506104e3610f47565b348015610517575f80fd5b5061039d6105263660046139dd565b610ff6565b348015610536575f80fd5b5061039d610545366004613a13565b611155565b348015610555575f80fd5b5061039d610564366004613a33565b611355565b348015610574575f80fd5b506103fe6105833660046139c6565b5f9081526002602052604090206001015490565b3480156105a2575f80fd5b5061037c6105b1366004613981565b6113b3565b3480156105c1575f80fd5b5060035461039d9062010000900460ff1681565b3480156105e0575f80fd5b5061039d6105ef3660046139c6565b6113fb565b3480156105ff575f80fd5b5061037c61060e366004613a71565b611455565b34801561061e575f80fd5b506103fe600681565b348015610632575f80fd5b506007546104b7906001600160a01b031681565b348015610651575f80fd5b5060035461039d906301000000900460ff1681565b348015610671575f80fd5b5061037c610680366004613a71565b61147f565b348015610690575f80fd5b5061037c61069f366004613981565b6114b7565b3480156106af575f80fd5b5061039d6106be36600461399c565b6114eb565b3480156106ce575f80fd5b506003546106e89065010000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a9565b348015610708575f80fd5b506103fe600f5481565b34801561071d575f80fd5b506003546106e890600160481b900463ffffffff1681565b348015610740575f80fd5b5061039d61074f3660046139c6565b60156020525f908152604090205460ff1681565b34801561076e575f80fd5b506103fe600e5481565b348015610783575f80fd5b5061039d6107923660046139c6565b6114f9565b3480156107a2575f80fd5b506103fe600d5481565b3480156107b7575f80fd5b5061037c6107c63660046139c6565b6115cc565b3480156107d6575f80fd5b5061037c6107e5366004613981565b61173c565b3480156107f5575f80fd5b506103fe6108043660046139c6565b60166020525f908152604090205481565b348015610820575f80fd5b5060035461039d90610100900460ff1681565b34801561083e575f80fd5b506103fe611784565b348015610852575f80fd5b506103fe610861366004613981565b6001600160a01b03165f9081526010602052604090205490565b348015610886575f80fd5b506103fe611805565b61037c61089d366004613a13565b611823565b3480156108ad575f80fd5b506103fe6108bc366004613981565b60146020525f908152604090205481565b3480156108d8575f80fd5b5061037c6108e73660046139c6565b611db7565b3480156108f7575f80fd5b506008546104b7906001600160a01b031681565b348015610916575f80fd5b5061037c6109253660046139c6565b611ee8565b348015610935575f80fd5b5061039d610944366004613a71565b61200b565b348015610954575f80fd5b506103c6612035565b348015610968575f80fd5b506004546104b7906001600160a01b031681565b348015610987575f80fd5b506103fe5f81565b34801561099a575f80fd5b5061039d6109a936600461399c565b612042565b3480156109b9575f80fd5b5061039d6109c836600461399c565b612050565b3480156109d8575f80fd5b506104e36120a3565b3480156109ec575f80fd5b506005546104b7906001600160a01b031681565b348015610a0b575f80fd5b506103fe610a1a3660046139c6565b6121af565b348015610a2a575f80fd5b5061037c610a39366004613a71565b6124a3565b348015610a49575f80fd5b5061037c610a58366004613a9f565b6124c7565b348015610a68575f80fd5b506103fe610a77366004613ad0565b61258b565b61039d610a8a366004613b41565b6125b7565b348015610a9a575f80fd5b506103fe610aa936600461399c565b601260209081525f928352604080842090915290825290205481565b348015610ad0575f80fd5b5061037c610adf366004613a13565b61290b565b348015610aef575f80fd5b506103fe600c5481565b348015610b04575f80fd5b5060035461039d90640100000000900460ff1681565b5f6001600160e01b031982166301ffc9a760e01b1480610b4a57506001600160e01b031982166336372b0760e01b145b80610b595750610b5982612cad565b92915050565b60098054610b6c90613bfd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890613bfd565b8015610be35780601f10610bba57610100808354040283529160200191610be3565b820191905f5260205f20905b815481529060010190602001808311610bc657829003601f168201915b505050505081565b5f610bf96011338585612ce1565b9392505050565b5f610c09612d93565b6003546301000000900460ff1615610c3457604051634a7f394f60e01b815260040160405180910390fd5b60065f9054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca89190613c44565b610ccd5760405162461bcd60e51b8152600401610cc490613c5d565b60405180910390fd5b6007546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015610d14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d389190613c82565b6001600160a01b0316148015610db757506007546040516370a0823160e01b81523360048201526001916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db49190613c9d565b10155b610de95760405162461bcd60e51b81526020600482015260036024820152624e544f60e81b6044820152606401610cc4565b5f8281526015602052604090205460ff1615610e1857604051632795088960e11b815260040160405180910390fd5b600f54905080600d5f828254610e2e9190613cc8565b90915550505f828152601560209081526040808320805460ff19166001179055338352601390915281208054839290610e68908490613cc8565b90915550610e7890503382612dec565b50604080518381526020810183905233917f498ce537ddf5d91d4573d6a9d7a3b37d3b465448a1704783ce84b50ce65bcf75910160405180910390a2610ebd60018055565b919050565b600854600d5460405163590d8a9360e11b81525f928392839283926001600160a01b03169163b21b152691610efe919060040190815260200190565b6040805180830381865afa158015610f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3c9190613cdb565b909590945092505050565b600854600b54600d54604051634e48387960e01b8152600481019290925260248201525f9182916001600160a01b0390911690634e483879906044016040805180830381865afa158015610f9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc19190613cdb565b9092509050610fd36298968082613cfd565b4711610ff257604051630296a61d60e11b815260040160405180910390fd5b9091565b5f61100e5f805160206140138339815191523361200b565b61102a576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0382165f90815260106020526040902054831061106157604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b0382165f90815260126020908152604080832087845290915281208054859290611093908490613cc8565b90915550506001600160a01b0382165f90815260106020526040812080548592906110bf908490613d1c565b9091555050620694205f90815260106020527f9059a02c7203cf2da6b12b73f006db014311d912241ce854ad2ed136593cfec58054859290611102908490613cc8565b909155505060408051858152602081018590526001600160a01b038416917f1e1101ec4ba15b5696137cf90eb83e740ef873fab05084b6ed1c683f0edb49da910160405180910390a25060019392505050565b335f90815260126020908152604080832085845290915281205482111561118f57604051631e9acf1760e31b815260040160405180910390fd5b600554604051635f85703d60e11b8152306004820152602481018590526001600160a01b039091169063bf0ae07a90604401602060405180830381865afa1580156111dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112009190613c44565b1561121e57604051633beca36360e21b815260040160405180910390fd5b335f90815260126020908152604080832086845290915281208054849290611247908490613d1c565b9091555050620694205f90815260106020527f9059a02c7203cf2da6b12b73f006db014311d912241ce854ad2ed136593cfec5805484929061128a908490613d1c565b9091555050335f90815260106020526040812080548492906112ad908490613cc8565b9091555050600554604051634e77848160e11b8152600481018590523360248201526001600160a01b0390911690639cef0902906044015f604051808303815f87803b1580156112fb575f80fd5b505af115801561130d573d5f803e3d5ffd5b505060408051868152602081018690523393507f58abd4f632d77dee34297a3a06722b7e76e2d74741b986609d9ef1f6163d788392500160405180910390a250600192915050565b6003545f9060ff1661139b5760405162461bcd60e51b815260206004820152600f60248201526e21bab93b329039ba34b6361037b71760891b6044820152606401610cc4565b6113ab6010601133878787612e81565b949350505050565b6113bd5f3361200b565b6113d9576040516282b42960e81b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b5f611406813361200b565b611422576040516282b42960e81b815260040160405180910390fd5b604051339083156108fc029084905f818181858888f1935050505015801561144c573d5f803e3d5ffd5b50600192915050565b5f8281526002602052604090206001015461146f81612fbd565b6114798383612fca565b50505050565b6001600160a01b03811633146114a85760405163334bd91960e11b815260040160405180910390fd5b6114b2828261305b565b505050565b6114c15f3361200b565b6114dd576040516282b42960e81b815260040160405180910390fd5b6114e75f82612fca565b5050565b5f610bf960113385856130c6565b5f6115115f805160206140138339815191523361200b565b61152d576040516282b42960e81b815260040160405180910390fd5b6005546040516342c40ae760e11b8152306004820152602481018490525f916001600160a01b03169063858815ce90604401606060405180830381865afa15801561157a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159e9190613d43565b905080604001516115c15760405162461bcd60e51b8152600401610cc490613da1565b61144c600b5461316e565b6115e35f805160206140138339815191523361200b565b6115ff576040516282b42960e81b815260040160405180910390fd5b6005546040516342c40ae760e11b8152306004820152602481018390525f916001600160a01b03169063858815ce90604401606060405180830381865afa15801561164c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116709190613d43565b905080604001516116935760405162461bcd60e51b8152600401610cc490613da1565b60035460ff16806116b4576003805462ff0000191662010000179055505050565b60065460405163eea22d5760e01b81523060048201526001600160a01b039091169063eea22d57906024016020604051808303815f875af11580156116fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171f9190613c44565b6114b257604051637faf893f60e01b815260040160405180910390fd5b6117465f3361200b565b611762576040516282b42960e81b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600854600b54600d5460405163b1ab13ff60e01b81525f936001600160a01b03169263b1ab13ff926117c192600401918252602082015260400190565b602060405180830381865afa1580156117dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118009190613c9d565b905090565b5f600d54600b546127106118199190613dbd565b6118009190613cfd565b61182b612d93565b60035461184790600160481b900463ffffffff16610708613dd4565b63ffffffff1642101561186d57604051632931619160e01b815260040160405180910390fd5b60065f9054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190613c44565b6118fd5760405162461bcd60e51b8152600401610cc490613c5d565b600354349060ff1615611923576040516325a7718f60e21b815260040160405180910390fd5b811561196f575f8281526016602052604090205460021161196f5760405162461bcd60e51b8152600401610cc490602080825260049082015263155cd95960e21b604082015260600190565b805f0361198f57604051631e9acf1760e31b815260040160405180910390fd5b600b54600d54600c54600e5460085460405163d57b6dd160e01b8152600481018790526024810186905260448101859052606481018490525f9182916001600160a01b039091169063d57b6dd1906084016040805180830381865afa1580156119fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1e9190613cdb565b90925090505f6103e8611a32896002613dbd565b611a3c9190613cfd565b60085460405163078af9cb60e51b8152600481018a9052602481018990529192505f916001600160a01b039091169063f15f396090604401602060405180830381865afa158015611a8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab39190613c9d565b90508084118015611ad95750605a87611acd8a6064613dbd565b611ad79190613cfd565b105b15611af757604051632795088960e11b815260040160405180910390fd5b85841115611bd4578593505f611b0d8486613dbd565b90506103e8611b1d826002613dbd565b611b279190613cfd565b9250611b35338b8386613262565b604080518281525f602082018190528183015260608101879052905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a25f600c8190555084600e5f828254611b969190613cc8565b90915550611ba690503386612dec565b508a15611bba57611bb8858c33613307565b505b611bc5600c5461316e565b50505050505050505050611dae565b6064611be185605f613dbd565b611beb9190613cfd565b8b1080611bf75750838b115b15611c155760405163162908e360e11b815260040160405180910390fd5b86611c20858a613cc8565b1115611c3f57604051632795088960e11b815260040160405180910390fd5b604080518a81525f602082018190528183015260608101869052905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a2611c928487613d1c565b600c55611c9f8486613cc8565b600e55611cac3385612dec565b506004546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015611ce4573d5f803e3d5ffd5b508915611cf857611cf6848b33613307565b505b611d00613524565b600354610100900460ff16158015611d375750603287611d208688613cc8565b611d2b906064613dbd565b611d359190613cfd565b115b15611da457877fb784d798e93d1f80c25b7c43302279876eee65d141c40f293c9905d5c386112b88611d698789613cc8565b611d74906064613dbd565b611d7e9190613cfd565b604080519182524760208301520160405180910390a26003805461ff0019166101001790555b5050505050505050505b6114e760018055565b611dce5f805160206140138339815191523361200b565b611dea576040516282b42960e81b815260040160405180910390fd5b6005546040516342c40ae760e11b8152306004820152602481018390525f916001600160a01b03169063858815ce90604401606060405180830381865afa158015611e37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5b9190613d43565b90508060400151611e7e5760405162461bcd60e51b8152600401610cc490613da1565b6003805460ff640100000000808304821615810264ff000000001990931692909217928390556040517f44d0e6416f295349c13087813a843f48061e3af3b749a66d9bc36fae3b79c0ef93611edc9390049091161515815260200190565b60405180910390a15050565b611eff5f805160206140138339815191523361200b565b611f1b576040516282b42960e81b815260040160405180910390fd5b6005546040516342c40ae760e11b8152306004820152602481018390525f916001600160a01b03169063858815ce90604401606060405180830381865afa158015611f68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8c9190613d43565b90508060400151611faf5760405162461bcd60e51b8152600401610cc490613da1565b6003805460ff6301000000808304821615810263ff0000001990931692909217928390556040517f188351137d7aadca40b3c121e2e44ca89bb067478341c45abaa6596f0c6392b693611edc9390049091161515815260200190565b5f9182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600a8054610b6c90613bfd565b5f610bf9601133858561364d565b6003545f9060ff166120965760405162461bcd60e51b815260206004820152600f60248201526e21bab93b329039ba34b6361037b71760891b6044820152606401610cc4565b610bf96010338585613746565b600b54600d5460085460405163078af9cb60e51b815260048101849052602481018390525f938493909290916001600160a01b039091169063f15f396090604401602060405180830381865afa1580156120ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121239190613c9d565b60085460405163b1ab13ff60e01b815260048101859052602481018490529194505f916001600160a01b039091169063b1ab13ff90604401602060405180830381865afa158015612176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219a9190613c9d565b90506121a68482613dbd565b94505050509091565b5f6121b8612d93565b600354640100000000900460ff16156121e457604051634a7f394f60e01b815260040160405180910390fd5b60065f9054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612234573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122589190613c44565b6122745760405162461bcd60e51b8152600401610cc490613c5d565b60075460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c590604401602060405180830381865afa1580156122c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e49190613c44565b8015612361575060075460405163020604bf60e21b81526004810184905230916001600160a01b03169063081812fc90602401602060405180830381865afa158015612332573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123569190613c82565b6001600160a01b0316145b6123935760405162461bcd60e51b8152602060048201526003602482015262544e4160e81b6044820152606401610cc4565b600f546123a1906002613dbd565b600754600480546040516323b872dd60e01b815233928101929092526001600160a01b039081166024830152604482018690529293509116906323b872dd906064015f604051808303815f87803b1580156123fa575f80fd5b505af115801561240c573d5f803e3d5ffd5b505060408051858152602081018590523393507f2c6e00d05c9537687e3346c6bb423b06c873979206b8d425ddbb4f9b436e058292500160405180910390a2335f90815260146020526040902054612465908290613cc8565b335f90815260146020526040812091909155600d8054839290612489908490613cc8565b9091555061249990503382612dec565b50610ebd60018055565b5f828152600260205260409020600101546124bd81612fbd565b611479838361305b565b6124de5f805160206140138339815191523361200b565b6124fa576040516282b42960e81b815260040160405180910390fd5b600d545f60ff8316810361252757612710612516836096613dbd565b6125209190613cfd565b9050612572565b8260ff1660010361254057612710612516836014613dbd565b8260ff1660020361255957612710612516836032613dbd565b604051634a7f394f60e01b815260040160405180910390fd5b600d8054820190556125848482612dec565b5050505050565b6001600160a01b038083165f908152601160209081526040808320938516835292905290812054610bf9565b5f8054610100900460ff16158080156125d657505f54600160ff909116105b806125f657506125e530613815565b1580156125f657505f5460ff166001145b6126595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cc4565b5f805460ff19166001179055801561267a575f805461ff0019166101001790555b6126845f33612fca565b5060048054336001600160a01b031991821617909155600880549091166001600160a01b03871617905560096126bb8b8d83613e3d565b5088886040516020016126cf929190613ef8565b604051602081830303815290604052600a90816126ec9190613f14565b50600780546001600160a01b03808a166001600160a01b03199283161790925560045460068054831691841691909117905560058054928716929091169190911790556127465f8051602061401383398151915285612fca565b506040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038816906301ffc9a790602401602060405180830381865afa158015612790573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b49190613c44565b6127e55760405162461bcd60e51b8152602060048201526002602482015261494360f01b6044820152606401610cc4565b5f6127f387620f4240613dbd565b600d81905590506128066107d082613cfd565b600f556064612816826016613dbd565b6128209190613cfd565b61282a9082613d1c565b600c55600380546cffffffff0000000000000000001916600160481b4263ffffffff1602179055612871336064612862846014613dbd565b61286c9190613cfd565b612dec565b50612883846064612862846002613dbd565b506064612891826002613dbd565b61289b9190613cfd565b6001600160a01b0385165f90815260136020526040902055506001915080156128fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b509998505050505050505050565b612913612d93565b60035460ff1615612937576040516325a7718f60e21b815260040160405180910390fd5b60065f9054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612987573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ab9190613c44565b6129c75760405162461bcd60e51b8152600401610cc490613c5d565b335f90815260106020526040902054828110156129f757604051631e9acf1760e31b815260040160405180910390fd5b6129ff613524565b600d54600e54335f90815260136020908152604080832054601490925290912054612a2a8183613cc8565b851115612a6557612a3b8183613cc8565b612a458887613d1c565b11612a7e57612a548183613cc8565b612a5e9086613d1c565b9650612a7e565b60405163129ff37d60e01b815260040160405180910390fd5b865f03612a9e5760405163162908e360e11b815260040160405180910390fd5b600854600b54604051631dde90f760e11b8152600481018a9052602481018690526044810191909152606481018690525f916001600160a01b031690633bbd21ee90608401602060405180830381865afa158015612afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b229190613c9d565b90506064612b3182605d613dbd565b612b3b9190613cfd565b871015612b5b5760405163162908e360e11b815260040160405180910390fd5b80871115612b7c5760405163162908e360e11b815260040160405180910390fd5b5f6103e8612b8b836005613dbd565b612b959190613cfd565b905047821115612bb857604051630296a61d60e11b815260040160405180910390fd5b612bc28183613d1c565b6004546040519193506001600160a01b03169082156108fc029083905f818181858888f19350505050158015612bfa573d5f803e3d5ffd5b5088600c5f828254612c0c9190613cc8565b90915550612c1c90508986613d1c565b600e55612c29338a61384d565b604051339083156108fc029084905f818181858888f19350505050158015612c53573d5f803e3d5ffd5b50604080515f808252602082018c90528183018590526060820152905133917f49926bbebe8474393f434dfa4f78694c0923efa07d19f2284518bfabd06eb737919081900360800190a2505050505050506114e760018055565b5f6001600160e01b03198216637965db0b60e01b1480610b5957506301ffc9a760e01b6001600160e01b0319831614610b59565b5f6001600160a01b038416612d085760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038316612d2e5760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038481165f818152602088815260408083209488168084529482529182902086905590518581527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3506001949350505050565b600260015403612de55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cc4565b6002600155565b600b54600d545f9190612dff8483613cc8565b1115612e335760405162461bcd60e51b8152602060048201526003602482015262454d5360e81b6044820152606401610cc4565b600b8054840190556001600160a01b0384165f818152601060209081526040808320805488019055518681525f80516020614033833981519152910160405180910390a35060019392505050565b5f6001600160a01b038416612ea85760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038316612ece5760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038085165f908152602088815260408083209389168352929052205482811015612f115760405162461bcd60e51b8152600401610cc490613ff6565b6001600160a01b0385165f9081526020899052604090205483811015612f495760405162461bcd60e51b8152600401610cc490613ff6565b6001600160a01b038681165f81815260208b815260408083208c86168452825280832089880390558383528d8252808320898703905593891680835291849020805489019055925187815290925f80516020614033833981519152910160405180910390a350600198975050505050505050565b612fc781336138c2565b50565b5f612fd5838361200b565b613054575f8381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561300c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610b59565b505f610b59565b5f613066838361200b565b15613054575f8381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610b59565b5f6001600160a01b0384166130ed5760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b0383166131135760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038481165f8181526020888152604080832094881680845294825291829020805487019081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101612d80565b80156131a5575f81600d546131839190613d1c565b905080156131a3576004546131a1906001600160a01b031682612dec565b505b505b6003805460ff191660011790819055600654600b5460075460405163412f54c960e11b815260048101929092526001600160a01b0390811660248301523060448301526201000090930460ff161515606482015291169063825ea992906084016020604051808303815f875af1158015613221573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132459190613c44565b612fc757604051637faf893f60e01b815260040160405180910390fd5b5f61326d8284613cc8565b8411613279575f61328d565b6132838284613cc8565b61328d9085613d1c565b6004546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156132c5573d5f803e3d5ffd5b508015612584576040516001600160a01b0386169082156108fc029083905f818181858888f193505050501580156132ff573d5f803e3d5ffd5b505050505050565b5f806103e8613317866019613dbd565b6133219190613cfd565b6007546040516331a9108f60e11b8152600481018790529192506001600160a01b031690636352211e90602401602060405180830381865afa925050508015613387575060408051601f3d908101601f1916820190925261338491810190613c82565b60015b613394575f915050610bf9565b6001600160a01b038116158015906133be5750836001600160a01b0316816001600160a01b031614155b6133ef5760405162461bcd60e51b8152602060048201526002602482015261494160f01b6044820152606401610cc4565b5f858152601660209081526040808320805460010190556001600160a01b0387168352601090915281208054849290613429908490613cc8565b90915550506001600160a01b0381165f9081526010602052604081208054849290613455908490613cc8565b9091555050600b805460028402908101909155600d805490910190556040518281526001600160a01b038516905f905f805160206140338339815191529060200160405180910390a36040518281526001600160a01b038216905f905f805160206140338339815191529060200160405180910390a3806001600160a01b0316846001600160a01b03167faeecfcda1271d292db728294b8ae465871ec039d51404caf49a7eb0ade51770a8460405161351091815260200190565b60405180910390a350600195945050505050565b600b54600d545f81613537846064613dbd565b6135419190613cfd565b60035490915065010000000000900463ffffffff16828410613566576114795f61316e565b605a8210158015613575575080155b156135e45761358642613840613dd4565b6003805463ffffffff92909216650100000000000268ffffffff000000000019909216919091179055604051600181527f47ee9ee28bb27f7e91966df68e104de010382c021f3a36fca4425360c79849219060200160405180910390a15b8015611479578042106114795760468210613602576114798461316e565b6003805468ffffffff0000000000191690556040515f81527f47ee9ee28bb27f7e91966df68e104de010382c021f3a36fca4425360c79849219060200160405180910390a150505050565b5f6001600160a01b0384166136745760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b03831661369a5760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b038085165f9081526020878152604080832093871683529290522054828110156136dd5760405162461bcd60e51b8152600401610cc490613ff6565b6001600160a01b038581165f81815260208981526040808320948916808452948252918290208786039081905591519182527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350600195945050505050565b5f6001600160a01b03841661376d5760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b0383166137935760405162461bcd60e51b8152600401610cc490613fd0565b6001600160a01b0384165f90815260208690526040902054828110156137cb5760405162461bcd60e51b8152600401610cc490613ff6565b6001600160a01b038581165f81815260208981526040808320888703905593881680835291849020805488019055925186815290925f805160206140338339815191529101613510565b5f813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906113ab575050151592915050565b6001600160a01b0382165f9081526010602052604081208054839290613874908490613d1c565b9250508190555080600b5f82825461388c9190613d1c565b90915550506040518181525f906001600160a01b038416905f805160206140338339815191529060200160405180910390a35050565b6138cc828261200b565b6114e75760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610cc4565b5f6020828403121561390b575f80fd5b81356001600160e01b031981168114610bf9575f80fd5b5f6020808352835180828501525f5b8181101561394d57858101830151858201604001528201613931565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612fc7575f80fd5b5f60208284031215613991575f80fd5b8135610bf98161396d565b5f80604083850312156139ad575f80fd5b82356139b88161396d565b946020939093013593505050565b5f602082840312156139d6575f80fd5b5035919050565b5f805f606084860312156139ef575f80fd5b83359250602084013591506040840135613a088161396d565b809150509250925092565b5f8060408385031215613a24575f80fd5b50508035926020909101359150565b5f805f60608486031215613a45575f80fd5b8335613a508161396d565b92506020840135613a608161396d565b929592945050506040919091013590565b5f8060408385031215613a82575f80fd5b823591506020830135613a948161396d565b809150509250929050565b5f8060408385031215613ab0575f80fd5b8235613abb8161396d565b9150602083013560ff81168114613a94575f80fd5b5f8060408385031215613ae1575f80fd5b8235613aec8161396d565b91506020830135613a948161396d565b5f8083601f840112613b0c575f80fd5b50813567ffffffffffffffff811115613b23575f80fd5b602083019150836020828501011115613b3a575f80fd5b9250929050565b5f805f805f805f805f60e08a8c031215613b59575f80fd5b893567ffffffffffffffff80821115613b70575f80fd5b613b7c8d838e01613afc565b909b50995060208c0135915080821115613b94575f80fd5b50613ba18c828d01613afc565b90985096505060408a0135613bb58161396d565b945060608a0135935060808a0135613bcc8161396d565b925060a08a0135613bdc8161396d565b915060c08a0135613bec8161396d565b809150509295985092959850929598565b600181811c90821680613c1157607f821691505b602082108103613c2f57634e487b7160e01b5f52602260045260245ffd5b50919050565b80518015158114610ebd575f80fd5b5f60208284031215613c54575f80fd5b610bf982613c35565b6020808252600b908201526a456d6572672e204d6f646560a81b604082015260600190565b5f60208284031215613c92575f80fd5b8151610bf98161396d565b5f60208284031215613cad575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b5957610b59613cb4565b5f8060408385031215613cec575f80fd5b505080516020909101519092909150565b5f82613d1757634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b5957610b59613cb4565b634e487b7160e01b5f52604160045260245ffd5b5f60608284031215613d53575f80fd5b6040516060810181811067ffffffffffffffff82111715613d7657613d76613d2f565b80604052508251815260208301516020820152613d9560408401613c35565b60408201529392505050565b6020808252600290820152614e4560f01b604082015260600190565b8082028115828204841417610b5957610b59613cb4565b63ffffffff818116838216019080821115613df157613df1613cb4565b5092915050565b601f8211156114b2575f81815260208120601f850160051c81016020861015613e1e5750805b601f850160051c820191505b818110156132ff57828155600101613e2a565b67ffffffffffffffff831115613e5557613e55613d2f565b613e6983613e638354613bfd565b83613df8565b5f601f841160018114613e9a575f8515613e835750838201355b5f19600387901b1c1916600186901b178355612584565b5f83815260209020601f19861690835b82811015613eca5786850135825560209485019460019092019101613eaa565b5086821015613ee6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b606560f81b8152818360018301375f9101600101908152919050565b815167ffffffffffffffff811115613f2e57613f2e613d2f565b613f4281613f3c8454613bfd565b84613df8565b602080601f831160018114613f75575f8415613f5e5750858301515b5f19600386901b1c1916600185901b1785556132ff565b5f85815260208120601f198616915b82811015613fa357888601518255948401946001909101908401613f84565b5085821015613fc057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b60208082526002908201526124a160f11b60408201526060019056fe2ea9abf59851a80b8f189014727ec935f64a7d4f514d36264089b0547c0921c8ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c0273d8444f6a67d7d357557ea83d0498ec5d30263cfa808630b5b5bdd60ff0b64736f6c63430008140033