ERC-20
Overview
Max Total Supply
244,000,000 SIFY
Holders
761
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,400,000 SIFYValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Stakify
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; contract Stakify is Ownable, IERC20 { address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; string constant _name = "Stakify"; string constant _symbol = "SIFY"; uint8 constant _decimals = 18; uint256 _totalSupply; // One hundred billions mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) _allowances; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isAuthorized; mapping(address => bool) isMaxWalletExcluded; mapping(address => bool) isMaxTxExcluded; address public treasuryWallet; // Fees uint256 public buyLiquidityFee; uint256 public buyTreasuryFee; uint256 public buyBurnFee; uint256 public buyStakeFee; uint256 public buyTotalFee; uint256 public sellLiquidityFee; uint256 public sellTreasuryFee; uint256 public sellStakeFee; uint256 public sellBurnFee; uint256 public sellTotalFee; bool public isRepellentEnabled; uint256 public repellentSellAutoBurnFee; uint256 public repellentSellLiquidityFee; uint256 public repellentSellTreasuryFee; uint256 public repellentSellStakeFee; uint256 public repellentSellTotalFee; uint256 public repellentBuyAutoBurnFee; uint256 public repellentBuyLiquidityFee; uint256 public repellentBuyTreasuryFee; uint256 public repellentBuyStakeFee; uint256 public repellentBuyTotalFee; address public stakingWallet; uint256 public launchtAt; event RepellentFeeActivated(uint256 activatedAmount); event RepellentFeeDisabled(uint256 disabledAmount); address BUSD; enum LPLevels { Level1, Level2, Level3, Level4, Level5 } LPLevels public currentLpLevel; bool public isRepellentFee; uint256 public lastLPCheckedAt; uint256 public lastLPAmount; uint256 public lpCheckFrequency; struct LPRange { uint256 minLimit; uint256 maxLimit; uint256 dropLimit; uint256 recoverLimit; } mapping(LPLevels => LPRange) public lpRanges; uint256 public repellentFeeActivatedAt; uint256 public repellentFeeActivatedAmount; uint256 public repellentFeeRecoverAmount; uint256 public lastRepellentFeeActivatedAt; uint256 public lastRepellentFeeRecoveredAt; IUniswapV2Router02 public router; address public pair; bool public getTransferFees; uint256 public swapThreshold; // 0.001% of supply uint256 public maxTreansaction; uint256 public maxWallet; bool public contractSwapEnabled; bool public isTradeEnabled; bool inContractSwap; modifier swapping() { inContractSwap = true; _; inContractSwap = false; } event SetIsFeeExempt(address holder, bool status); event AddAuthorizedWallet(address holder, bool status); event SetDoContractSwap(bool status); event DoContractSwap(uint256 amount, uint256 time); event AutoLiquify(uint256 amountBNB, uint256 amountBOG); constructor() { _totalSupply = 244 * 10 ** 6 * (10 ** _decimals); buyLiquidityFee = 1; buyTreasuryFee = 2; buyBurnFee = 1; buyStakeFee = 1; buyTotalFee = 5; sellLiquidityFee = 1; sellTreasuryFee = 22; sellBurnFee = 1; sellStakeFee = 1; sellTotalFee = 25; repellentSellAutoBurnFee = 15; repellentSellLiquidityFee = 5; repellentSellTreasuryFee = 10; repellentSellTotalFee = 30; repellentBuyAutoBurnFee = 0; repellentBuyLiquidityFee = 0; repellentBuyTreasuryFee = 0; repellentBuyTotalFee = 0; router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); pair = IUniswapV2Factory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = type(uint256).max; treasuryWallet = 0xdAb6280d5a87c10250F454EE3AD3b3b0C1A274C0; BUSD = 0xdAC17F958D2ee523a2206206994597C13D831ec7; lpCheckFrequency = 24 hours; getTransferFees = false; isRepellentEnabled = true; swapThreshold = (_totalSupply * 1) / 10000; // 0.001% of supply maxTreansaction = (_totalSupply * 2) / 100; maxWallet = (_totalSupply * 2) / 100; contractSwapEnabled = true; isTradeEnabled = false; address newOwner = 0x64Ab7F64187AF212007A3EE9fdF990101DE4Bc16; isFeeExempt[newOwner] = true; isFeeExempt[address(this)] = true; isFeeExempt[treasuryWallet] = true; isAuthorized[newOwner] = true; isAuthorized[address(this)] = true; isAuthorized[ZERO] = true; isAuthorized[DEAD] = true; isAuthorized[treasuryWallet] = true; isMaxWalletExcluded[msg.sender] = true; isMaxTxExcluded[msg.sender] = true; isMaxWalletExcluded[ZERO] = true; isMaxTxExcluded[ZERO] = true; isMaxWalletExcluded[DEAD] = true; isMaxTxExcluded[DEAD] = true; lpRanges[LPLevels.Level1].minLimit = 0; lpRanges[LPLevels.Level1].maxLimit = 100000 * 10 ** 6; lpRanges[LPLevels.Level1].dropLimit = 1000; lpRanges[LPLevels.Level1].recoverLimit = 2000; lpRanges[LPLevels.Level2].minLimit = 100000 * 10 ** 6; lpRanges[LPLevels.Level2].maxLimit = 200000 * 10 ** 6; lpRanges[LPLevels.Level2].dropLimit = 750; lpRanges[LPLevels.Level2].recoverLimit = 1500; lpRanges[LPLevels.Level3].minLimit = 200000 * 10 ** 6; lpRanges[LPLevels.Level3].maxLimit = 500000 * 10 ** 6; lpRanges[LPLevels.Level3].dropLimit = 500; lpRanges[LPLevels.Level3].recoverLimit = 1000; lpRanges[LPLevels.Level4].minLimit = 500000 * 10 ** 6; lpRanges[LPLevels.Level4].maxLimit = 1000000 * 10 ** 6; lpRanges[LPLevels.Level4].dropLimit = 250; lpRanges[LPLevels.Level4].recoverLimit = 500; lpRanges[LPLevels.Level5].minLimit = 1000000 * 10 ** 6; lpRanges[LPLevels.Level5].maxLimit = 600000 * 10 ** 6; lpRanges[LPLevels.Level5].dropLimit = 100; lpRanges[LPLevels.Level5].recoverLimit = 200; _balances[newOwner] = _totalSupply; emit Transfer(address(0), newOwner, _totalSupply); transferOwnership(newOwner); } receive() external payable {} function totalSupply() external view override returns (uint256) { return _totalSupply; } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance( address holder, address spender ) external view override returns (uint256) { return _allowances[holder][spender]; } function approve( address spender, uint256 amount ) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer( address recipient, uint256 amount ) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { require( _allowances[sender][msg.sender] >= amount, "Insufficient Allowance" ); _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount; } return _transferFrom(sender, recipient, amount); } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { if (!isTradeEnabled) require(isAuthorized[sender], "Trading disabled"); if (inContractSwap) { return _basicTransfer(sender, recipient, amount); } if (!isMaxTxExcluded[sender]) require(amount <= maxTreansaction, "Max transaction exceeded"); if (!isMaxWalletExcluded[recipient] && recipient != pair) { require( (_balances[recipient] + amount) <= maxWallet, "Max wallet exceeded" ); } if ( (lastLPCheckedAt + lpCheckFrequency) < block.timestamp && !isRepellentFee && isTradeEnabled ) { uint256 lpBnbBalance = IERC20(router.WETH()).balanceOf( address(pair) ); lastLPAmount = getBnbPrice(lpBnbBalance); lastLPCheckedAt = block.timestamp; } if (isTradeEnabled) calculateLPStatus(); if (shouldDoContractSwap()) { doContractSwap(); } require(_balances[sender] >= amount, "Insufficient Balance"); _balances[sender] = _balances[sender] - amount; uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient] + amountReceived; emit Transfer(sender, recipient, amountReceived); return true; } function shouldDoContractSwap() internal view returns (bool) { return (msg.sender != pair && !inContractSwap && contractSwapEnabled && sellTotalFee > 0 && _balances[address(this)] >= swapThreshold); } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeToken; uint256 burnTokens; uint256 stakeTokens; if (isRepellentFee && isRepellentEnabled) { if (recipient == pair && repellentSellTotalFee > 0) { feeToken = (amount * repellentSellTotalFee) / 100; // get burn tokens if (repellentSellAutoBurnFee > 0) burnTokens = (feeToken * repellentSellAutoBurnFee) / repellentSellTotalFee; // get sell tokens if (repellentSellStakeFee > 0) stakeTokens = (feeToken * repellentSellStakeFee) / repellentSellTotalFee; } else if (repellentBuyTotalFee > 0) { feeToken = (amount * repellentBuyTotalFee) / 100; if (repellentBuyAutoBurnFee > 0) burnTokens = (feeToken * repellentBuyAutoBurnFee) / repellentBuyTotalFee; if (repellentBuyStakeFee > 0) stakeTokens = (feeToken * repellentBuyStakeFee) / repellentSellTotalFee; } } else { if (recipient == pair && sellTotalFee > 0) { feeToken = (amount * sellTotalFee) / 100; if (sellBurnFee > 0) burnTokens = (feeToken * sellBurnFee) / sellTotalFee; if (sellStakeFee > 0) stakeTokens = (feeToken * sellStakeFee) / sellTotalFee; } else if (buyTotalFee > 0) { feeToken = (amount * buyTotalFee) / 100; if (buyBurnFee > 0) burnTokens = (feeToken * buyBurnFee) / buyTotalFee; if (buyStakeFee > 0) stakeTokens = (feeToken * buyStakeFee) / buyTotalFee; } } if (burnTokens > 0) { _balances[DEAD] = _balances[DEAD] + burnTokens; emit Transfer(sender, DEAD, burnTokens); } if (stakeTokens > 0) { _balances[stakingWallet] = _balances[stakingWallet] + stakeTokens; emit Transfer(sender, stakingWallet, stakeTokens); } _balances[address(this)] = _balances[address(this)] + (feeToken - (burnTokens + stakeTokens)); emit Transfer( sender, address(this), (feeToken - (burnTokens + stakeTokens)) ); return (amount - feeToken); } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(_balances[sender] >= amount, "Insufficient Balance"); _balances[sender] = _balances[sender] - amount; _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } function shouldTakeFee( address sender, address to ) internal view returns (bool) { if (!getTransferFees) { if (sender != pair && to != pair) return false; } if (isFeeExempt[sender] || isFeeExempt[to]) { return false; } else { return true; } } function isFeeExcluded(address _wallet) public view returns (bool) { return isFeeExempt[_wallet]; } function doContractSwap() internal swapping { uint256 contractTokenBalance = _balances[address(this)]; uint256 tokensToLp = (contractTokenBalance * sellLiquidityFee) / sellTotalFee; uint256 marketingFee = contractTokenBalance - tokensToLp; if (marketingFee > 0) { swapTokensForEth(marketingFee); uint256 swappedTokens = address(this).balance; if (swappedTokens > 0) payable(treasuryWallet).transfer(swappedTokens); } if (tokensToLp > 0) swapAndLiquify(tokensToLp); } function swapAndLiquify(uint256 tokens) private { // split the contract balance into halves uint256 half = tokens / 2; uint256 otherHalf = tokens - half; // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance - initialBalance; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit AutoLiquify(newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityETH{value: bnbAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable DEAD, block.timestamp ); } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; emit SetIsFeeExempt(holder, exempt); } function setDoContractSwap(bool _enabled) external onlyOwner { contractSwapEnabled = _enabled; emit SetDoContractSwap(_enabled); } function changeTreasuryWallet(address _wallet) external onlyOwner { treasuryWallet = _wallet; } function changeBuyFees( uint256 _liquidityFee, uint256 _treasuryFee, uint256 _burnFee, uint256 _stakeFee ) external onlyOwner { buyLiquidityFee = _liquidityFee; buyTreasuryFee = _treasuryFee; buyBurnFee = _burnFee; buyStakeFee = _stakeFee; buyTotalFee = _liquidityFee + _treasuryFee + _burnFee + _stakeFee; require(buyTotalFee <= 10, "Total fees can not greater than 10%"); } function changeSellFees( uint256 _liquidityFee, uint256 _treasuryFee, uint256 _burnFee, uint256 _stakeFee ) external onlyOwner { sellLiquidityFee = _liquidityFee; sellTreasuryFee = _treasuryFee; sellBurnFee = _burnFee; sellStakeFee = _stakeFee; sellTotalFee = _liquidityFee + _treasuryFee + _burnFee + _stakeFee; if (isTradeEnabled && (launchtAt + 24 hours) < block.timestamp) require(sellTotalFee <= 10, "Total fees can not greater than 10%"); } function enableTrading() external onlyOwner { isTradeEnabled = true; launchtAt = block.timestamp; } function setAuthorizedWallets( address _wallet, bool _status ) external onlyOwner { isAuthorized[_wallet] = _status; } function rescueEth() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No enough ETH to transfer"); payable(msg.sender).transfer(balance); } function changeGetFeesOnTransfer(bool _status) external onlyOwner { getTransferFees = _status; } function changeLpCheckFrequency(uint256 _hours) external onlyOwner { lpCheckFrequency = _hours; } function changeRepellentSellFees( uint256 _autoBurnFee, uint256 _liquidityFee, uint256 _treasuryFee, uint256 _stakeFee ) external onlyOwner { repellentSellAutoBurnFee = _autoBurnFee; repellentSellLiquidityFee = _liquidityFee; repellentSellTreasuryFee = _treasuryFee; repellentSellStakeFee = _stakeFee; repellentSellTotalFee = _autoBurnFee + _liquidityFee + _treasuryFee + _stakeFee; require(repellentSellTotalFee <= 30, "Fees can not be grater than 30%"); } function changeRepellentBuyFees( uint256 _autoBurnFee, uint256 _liquidityFee, uint256 _treasuryFee, uint256 _stakeFee ) external onlyOwner { repellentBuyAutoBurnFee = _autoBurnFee; repellentBuyLiquidityFee = _liquidityFee; repellentBuyTreasuryFee = _treasuryFee; repellentBuyStakeFee = _stakeFee; repellentBuyTotalFee = _autoBurnFee + _liquidityFee + _treasuryFee + _stakeFee; require(repellentSellTotalFee <= 20, "Fees can not be grater than 20%"); } function setLpRange( LPLevels _level, uint256 _min, uint256 _max, uint256 _drop, uint256 _recover ) external onlyOwner { LPRange storage currentRange = lpRanges[_level]; currentRange.minLimit = _min; currentRange.maxLimit = _max; currentRange.dropLimit = _drop; currentRange.recoverLimit = _recover; } function calculateLPStatus() internal { uint256 lpBnbBalance = IERC20(router.WETH()).balanceOf(address(pair)); uint256 lpBalance = getBnbPrice(lpBnbBalance); if ( lpBalance >= lpRanges[LPLevels.Level1].minLimit && lpBalance <= lpRanges[LPLevels.Level1].maxLimit ) currentLpLevel = LPLevels.Level1; if ( lpBalance >= lpRanges[LPLevels.Level2].minLimit && lpBalance <= lpRanges[LPLevels.Level2].maxLimit ) currentLpLevel = LPLevels.Level2; if ( lpBalance >= lpRanges[LPLevels.Level3].minLimit && lpBalance <= lpRanges[LPLevels.Level3].maxLimit ) currentLpLevel = LPLevels.Level3; if ( lpBalance >= lpRanges[LPLevels.Level4].minLimit && lpBalance <= lpRanges[LPLevels.Level4].maxLimit ) currentLpLevel = LPLevels.Level4; if (lpBalance >= lpRanges[LPLevels.Level5].minLimit) currentLpLevel = LPLevels.Level5; if (lastLPAmount > lpBalance && !isRepellentFee) { uint256 lpDifference = lastLPAmount - lpBalance; uint256 differencePercentage = ((lpDifference * 10000) / lastLPAmount); if (differencePercentage > lpRanges[currentLpLevel].dropLimit) { isRepellentFee = true; repellentFeeActivatedAt = block.timestamp; lastRepellentFeeActivatedAt = block.timestamp; repellentFeeActivatedAmount = lpBalance; repellentFeeRecoverAmount = lpBalance + ((lpBalance * lpRanges[currentLpLevel].recoverLimit) / 10000); emit RepellentFeeActivated(lpBalance); } } if (isRepellentFee && lpBalance > repellentFeeRecoverAmount) { isRepellentFee = false; repellentFeeActivatedAt = 0; repellentFeeActivatedAmount = 0; repellentFeeRecoverAmount = 0; lastRepellentFeeRecoveredAt = block.timestamp; lastLPAmount = lpBalance; emit RepellentFeeDisabled(lpBalance); } } function getBnbPrice(uint256 _amount) public view returns (uint256) { address[] memory path = new address[](2); path[0] = router.WETH(); path[1] = BUSD; uint256[] memory amounts = router.getAmountsOut(_amount, path); return amounts[1]; } function changeMaxWallet(uint256 _amount) external onlyOwner { require( _amount >= ((_totalSupply * 2) / 100), "Max wallet can not less than 2%" ); maxWallet = _amount; } function changeMaxTx(uint256 _amount) external onlyOwner { require( _amount >= ((_totalSupply * 1) / 100), "Max wallet can not less than 1%" ); maxTreansaction = _amount; } function maxWalletExclude( address _wallet, bool _status ) external onlyOwner { isMaxWalletExcluded[_wallet] = _status; } function maxTxExclude(address _wallet, bool _status) external onlyOwner { isMaxTxExcluded[_wallet] = _status; } function toggleReppelent(bool _status) external onlyOwner { isRepellentEnabled = _status; } function changeStakeAddress(address _stakePool) external onlyOwner { stakingWallet = _stakePool; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AddAuthorizedWallet","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":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DoContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"activatedAmount","type":"uint256"}],"name":"RepellentFeeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"disabledAmount","type":"uint256"}],"name":"RepellentFeeDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetDoContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetIsFeeExempt","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"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","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":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","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":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyStakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"changeGetFeesOnTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hours","type":"uint256"}],"name":"changeLpCheckFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_autoBurnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"}],"name":"changeRepellentBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_autoBurnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"}],"name":"changeRepellentSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_stakeFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakePool","type":"address"}],"name":"changeStakeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentLpLevel","outputs":[{"internalType":"enum Stakify.LPLevels","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getBnbPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isFeeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRepellentEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRepellentFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLPAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLPCheckedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRepellentFeeActivatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRepellentFeeRecoveredAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpCheckFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum Stakify.LPLevels","name":"","type":"uint8"}],"name":"lpRanges","outputs":[{"internalType":"uint256","name":"minLimit","type":"uint256"},{"internalType":"uint256","name":"maxLimit","type":"uint256"},{"internalType":"uint256","name":"dropLimit","type":"uint256"},{"internalType":"uint256","name":"recoverLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTreansaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"maxTxExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"maxWalletExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"repellentBuyAutoBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentBuyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentBuyStakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentBuyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentBuyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentFeeActivatedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentFeeActivatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentFeeRecoverAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentSellAutoBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentSellStakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentSellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"repellentSellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellStakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDoContractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Stakify.LPLevels","name":"_level","type":"uint8"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"uint256","name":"_drop","type":"uint256"},{"internalType":"uint256","name":"_recover","type":"uint256"}],"name":"setLpRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"toggleReppelent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506200001d336200087b565b6200002b6012600a62000ac1565b6200003b90630e8b250062000ad9565b600190815560098190556002600a908155600b829055600c8290556005600d819055600e8390556016600f81815560118590556010949094556019601281905560149490945560159190915555601e601855600090819055601a819055601b819055601d55602a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012b919062000af3565b6001600160a01b031663c9c65396602a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000af3565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000226919062000af3565b602b80546001600160a01b039283166001600160a01b0319918216178255306000908152600360209081526040808320602a549096168352948152939020600019905560088054821673dab6280d5a87c10250f454ee3ad3b3b0c1a274c017905582541673dac17f958d2ee523a2206206994597c13d831ec71790915562015180602355805460ff60a01b191690556013805460ff19166001908117909155805461271091620002d7919062000ad9565b620002e3919062000b1e565b602c55600154606490620002f990600262000ad9565b62000305919062000b1e565b602d556001546064906200031b90600262000ad9565b62000327919062000b1e565b602e55602f805461ffff19166001908117909155600460209081527f0ed789647784a0f81cd8c89dcb96b593fb53e315945a8193827899f71bb75bd4805460ff19908116841790915530600081815260408082208054851687179055600880546001600160a01b0390811684528284208054871689179055600587527f88c544f575e5786f2f72d2c2a128cae28322ddcee65242d87c54592ab3bb47cc805487168917905593835281832080548616881790557f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80548616881790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805486168817905554909216815281812080548416861790553381526006845281812080548416861790556007845281812080548416861790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f880548416861790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80548416861790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548416861790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805490931685179092557fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad82905564174876e8007fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ae8190556103e87fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091af8190556107d07fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091b0557fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d691909155642e90edd0007fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d78190556102ee7fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d8556105dc7fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d9557f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da5564746a5288007f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db8190556101f47f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc8190557f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dd929092557f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf05564e8d4a510007f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf181905560fa7f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf2557f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf3919091557fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e1555648bb2c970007fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e165560647fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e175560c87fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e185592547364ab7f64187af212007a3ee9fdf990101de4bc16808352600284527fe393f4a9adc67299348ec16f18a5872575ecc629f0675345130072860e3622d58290558451918252935184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a36200087481620008cb565b5062000b41565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620008d56200094e565b6001600160a01b038116620009405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200094b816200087b565b50565b6000546001600160a01b03163314620009aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000937565b565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a03578160001904821115620009e757620009e7620009ac565b80851615620009f557918102915b93841c9390800290620009c7565b509250929050565b60008262000a1c5750600162000abb565b8162000a2b5750600062000abb565b816001811462000a44576002811462000a4f5762000a6f565b600191505062000abb565b60ff84111562000a635762000a63620009ac565b50506001821b62000abb565b5060208310610133831016604e8410600b841016171562000a94575081810a62000abb565b62000aa08383620009c2565b806000190482111562000ab75762000ab7620009ac565b0290505b92915050565b600062000ad260ff84168362000a0b565b9392505050565b808202811582820484141762000abb5762000abb620009ac565b60006020828403121562000b0657600080fd5b81516001600160a01b038116811462000ad257600080fd5b60008262000b3c57634e487b7160e01b600052601260045260246000fd5b500490565b61312f8062000b516000396000f3fe60806040526004361061046b5760003560e01c80638289aaa01161024a578063c5908e4511610139578063ea3a7828116100b6578063f887ea401161007a578063f887ea4014610d6c578063f8b45b0514610d8c578063f9fb1bcf14610da2578063fdb78c0e14610db8578063fe9fbb8014610dd257600080fd5b8063ea3a782814610c9e578063f11a24d314610cbe578063f2fde38b14610cd4578063f38e28e914610cf4578063f637434214610d5657600080fd5b8063ce541494116100fd578063ce54149414610bf6578063cf21e18e14610c16578063cf68145314610c2c578063dd62ed3e14610c42578063e71dc3f514610c8857600080fd5b8063c5908e4514610b6b578063cb611f4614610b8b578063ccf92ba814610bab578063ce2af1ac14610bcb578063ce31a06b14610be157600080fd5b8063910c6735116101c7578063adb873bd1161018b578063adb873bd14610ad0578063b0d9ae1b14610ae6578063b1a9bad514610afc578063ba625bfe14610b1c578063bca238aa14610b3257600080fd5b8063910c673514610a3757806395d89b4114610a4d578063979e958914610a7a578063a8aa1b3114610a90578063a9059cbb14610ab057600080fd5b80638aec2cb21161020e5780638aec2cb2146109a45780638c0a98e3146109c45780638d38a127146109da5780638da5cb5b146109f95780638ed52bbf14610a1757600080fd5b80638289aaa01461092d5780638346a6c214610943578063866e7cf514610959578063889187451461096f5780638a8c523c1461098f57600080fd5b80633705b392116103665780635e54eee2116102e357806370a08231116102a757806370a0823114610896578063715018a6146108cc57806374858e76146108e157806375f62683146108f7578063778c61521461090d57600080fd5b80635e54eee21461081457806361cf9265146108345780636556fce51461084a578063658d4b7f146108605780636b2fb1241461088057600080fd5b8063537c1ac71161032a578063537c1ac714610787578063571ac8b0146107a75780635962b9d7146107c757806359ec45e1146107e85780635c068a8c146107fe57600080fd5b80633705b392146106e75780633f4218e0146106fd5780634626402b1461072d57806346b99ac21461074d5780634b75b7bc1461076d57600080fd5b806318160ddd116103f457806323f4f9f5116103b857806323f4f9f51461065f5780632d1f0b401461067f578063313ce5671461069557806333e75aca146106b15780633683685a146106c757600080fd5b806318160ddd146105de5780631c2d86ad146105f35780631d407b2d146106095780631f55f48d1461061f57806323b872dd1461063f57600080fd5b806306fdde031161043b57806306fdde0314610504578063095ea7b31461053d5780630b006d601461056d5780630ce906071461058f578063122e9715146105b057600080fd5b8062afb325146104775780630445b667146104a057806306273fc7146104b657806306ee6ad8146104cc57600080fd5b3661047257005b600080fd5b34801561048357600080fd5b5061048d60125481565b6040519081526020015b60405180910390f35b3480156104ac57600080fd5b5061048d602c5481565b3480156104c257600080fd5b5061048d60225481565b3480156104d857600080fd5b50601e546104ec906001600160a01b031681565b6040516001600160a01b039091168152602001610497565b34801561051057600080fd5b506040805180820190915260078152665374616b69667960c81b60208201525b6040516104979190612bba565b34801561054957600080fd5b5061055d610558366004612c1d565b610e02565b6040519015158152602001610497565b34801561057957600080fd5b5061058d610588366004612c49565b610e6f565b005b34801561059b57600080fd5b50602b5461055d90600160a01b900460ff1681565b3480156105bc57600080fd5b506020546105d190600160a01b900460ff1681565b6040516104979190612c78565b3480156105ea57600080fd5b5060015461048d565b3480156105ff57600080fd5b5061048d601b5481565b34801561061557600080fd5b5061048d60255481565b34801561062b57600080fd5b5061048d61063a366004612c49565b610eeb565b34801561064b57600080fd5b5061055d61065a366004612ca0565b611072565b34801561066b57600080fd5b5061058d61067a366004612cf6565b611173565b34801561068b57600080fd5b5061048d60185481565b3480156106a157600080fd5b5060405160128152602001610497565b3480156106bd57600080fd5b5061048d601d5481565b3480156106d357600080fd5b5061058d6106e2366004612d11565b611199565b3480156106f357600080fd5b5061048d600d5481565b34801561070957600080fd5b5061055d610718366004612d46565b60046020526000908152604090205460ff1681565b34801561073957600080fd5b506008546104ec906001600160a01b031681565b34801561075957600080fd5b5061058d610768366004612d63565b6111cc565b34801561077957600080fd5b5060135461055d9060ff1681565b34801561079357600080fd5b5061058d6107a2366004612d46565b611263565b3480156107b357600080fd5b5061055d6107c2366004612d46565b61128d565b3480156107d357600080fd5b5060205461055d90600160a81b900460ff1681565b3480156107f457600080fd5b5061048d60105481565b34801561080a57600080fd5b5061048d600a5481565b34801561082057600080fd5b5061058d61082f366004612d63565b61129b565b34801561084057600080fd5b5061048d601a5481565b34801561085657600080fd5b5061048d60165481565b34801561086c57600080fd5b5061058d61087b366004612d11565b611328565b34801561088c57600080fd5b5061048d600f5481565b3480156108a257600080fd5b5061048d6108b1366004612d46565b6001600160a01b031660009081526002602052604090205490565b3480156108d857600080fd5b5061058d611394565b3480156108ed57600080fd5b5061048d60155481565b34801561090357600080fd5b5061048d601f5481565b34801561091957600080fd5b5061058d610928366004612c49565b6113a8565b34801561093957600080fd5b5061048d60265481565b34801561094f57600080fd5b5061048d60235481565b34801561096557600080fd5b5061048d60275481565b34801561097b57600080fd5b5061058d61098a366004612d63565b61141f565b34801561099b57600080fd5b5061058d6114b1565b3480156109b057600080fd5b5061058d6109bf366004612da4565b6114ce565b3480156109d057600080fd5b5061048d600c5481565b3480156109e657600080fd5b50602f5461055d90610100900460ff1681565b348015610a0557600080fd5b506000546001600160a01b03166104ec565b348015610a2357600080fd5b5061058d610a32366004612c49565b611529565b348015610a4357600080fd5b5061048d60295481565b348015610a5957600080fd5b506040805180820190915260048152635349465960e01b6020820152610530565b348015610a8657600080fd5b5061048d60215481565b348015610a9c57600080fd5b50602b546104ec906001600160a01b031681565b348015610abc57600080fd5b5061055d610acb366004612c1d565b611536565b348015610adc57600080fd5b5061048d60115481565b348015610af257600080fd5b5061048d602d5481565b348015610b0857600080fd5b5061058d610b17366004612d11565b611543565b348015610b2857600080fd5b5061048d60285481565b348015610b3e57600080fd5b5061055d610b4d366004612d46565b6001600160a01b031660009081526004602052604090205460ff1690565b348015610b7757600080fd5b5061058d610b86366004612d11565b611576565b348015610b9757600080fd5b5061058d610ba6366004612d46565b6115a9565b348015610bb757600080fd5b5061058d610bc6366004612cf6565b6115d3565b348015610bd757600080fd5b5061048d601c5481565b348015610bed57600080fd5b5061058d6115ee565b348015610c0257600080fd5b5061058d610c11366004612cf6565b611675565b348015610c2257600080fd5b5061048d60195481565b348015610c3857600080fd5b5061048d60145481565b348015610c4e57600080fd5b5061048d610c5d366004612de6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c9457600080fd5b5061048d600b5481565b348015610caa57600080fd5b5061058d610cb9366004612d63565b6116c4565b348015610cca57600080fd5b5061048d60095481565b348015610ce057600080fd5b5061058d610cef366004612d46565b611725565b348015610d0057600080fd5b50610d36610d0f366004612e1f565b60246020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610497565b348015610d6257600080fd5b5061048d600e5481565b348015610d7857600080fd5b50602a546104ec906001600160a01b031681565b348015610d9857600080fd5b5061048d602e5481565b348015610dae57600080fd5b5061048d60175481565b348015610dc457600080fd5b50602f5461055d9060ff1681565b348015610dde57600080fd5b5061055d610ded366004612d46565b60056020526000908152604090205460ff1681565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e5d9086815260200190565b60405180910390a35060015b92915050565b610e7761179e565b60646001546002610e889190612e50565b610e929190612e67565b811015610ee65760405162461bcd60e51b815260206004820152601f60248201527f4d61782077616c6c65742063616e206e6f74206c657373207468616e2032250060448201526064015b60405180910390fd5b602e55565b604080516002808252606082018352600092839291906020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612e9f565b81600081518110610f9057610f90612ebc565b6001600160a01b0392831660209182029290920181019190915254825191169082906001908110610fc357610fc3612ebc565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092919091169063d06ca61f906110079087908690600401612f16565b600060405180830381865afa158015611024573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104c9190810190612f2f565b90508060018151811061106157611061612ebc565b602002602001015192505050919050565b6001600160a01b03831660009081526003602090815260408083203384529091528120546000191461115e576001600160a01b038416600090815260036020908152604080832033845290915290205482111561110a5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610edd565b6001600160a01b0384166000908152600360209081526040808320338452909152902054611139908390612fed565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6111698484846117f8565b90505b9392505050565b61117b61179e565b602b8054911515600160a01b0260ff60a01b19909216919091179055565b6111a161179e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6111d461179e565b601484905560158390556016829055601781905580826111f48587613000565b6111fe9190613000565b6112089190613000565b6018819055601e101561125d5760405162461bcd60e51b815260206004820152601f60248201527f466565732063616e206e6f7420626520677261746572207468616e20333025006044820152606401610edd565b50505050565b61126b61179e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e6982600019610e02565b6112a361179e565b600e849055600f8390556011829055601081905580826112c38587613000565b6112cd9190613000565b6112d79190613000565b601255602f54610100900460ff168015611300575042601f54620151806112fe9190613000565b105b1561125d57600a601254111561125d5760405162461bcd60e51b8152600401610edd90613013565b61133061179e565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991015b60405180910390a15050565b61139c61179e565b6113a66000611c37565b565b6113b061179e565b606460015460016113c19190612e50565b6113cb9190612e67565b81101561141a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782077616c6c65742063616e206e6f74206c657373207468616e203125006044820152606401610edd565b602d55565b61142761179e565b6019849055601a839055601b829055601c81905580826114478587613000565b6114519190613000565b61145b9190613000565b601d556018546014101561125d5760405162461bcd60e51b815260206004820152601f60248201527f466565732063616e206e6f7420626520677261746572207468616e20323025006044820152606401610edd565b6114b961179e565b602f805461ff00191661010017905542601f55565b6114d661179e565b6000602460008760048111156114ee576114ee612c62565b60048111156114ff576114ff612c62565b81526020810191909152604001600020948555506001840192909255600283015560039091015550565b61153161179e565b602355565b600061116c3384846117f8565b61154b61179e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b61157e61179e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6115b161179e565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6115db61179e565b6013805460ff1916911515919091179055565b6115f661179e565b47806116445760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610edd565b604051339082156108fc029083906000818181858888f19350505050158015611671573d6000803e3d6000fd5b5050565b61167d61179e565b602f805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b6116cc61179e565b6009849055600a839055600b829055600c81905580826116ec8587613000565b6116f69190613000565b6117009190613000565b600d819055600a101561125d5760405162461bcd60e51b8152600401610edd90613013565b61172d61179e565b6001600160a01b0381166117925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610edd565b61179b81611c37565b50565b6000546001600160a01b031633146113a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610edd565b602f54600090610100900460ff16611865576001600160a01b03841660009081526005602052604090205460ff166118655760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610edd565b602f5462010000900460ff161561188857611881848484611c87565b905061116c565b6001600160a01b03841660009081526007602052604090205460ff166118fa57602d548211156118fa5760405162461bcd60e51b815260206004820152601860248201527f4d6178207472616e73616374696f6e20657863656564656400000000000000006044820152606401610edd565b6001600160a01b03831660009081526006602052604090205460ff161580156119315750602b546001600160a01b03848116911614155b156119a157602e546001600160a01b03841660009081526002602052604090205461195d908490613000565b11156119a15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610edd565b426023546021546119b29190613000565b1080156119c95750602054600160a81b900460ff16155b80156119dc5750602f54610100900460ff165b15611ad057602a54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190612e9f565b602b546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc9190613056565b9050611ac781610eeb565b60225550426021555b602f54610100900460ff1615611ae857611ae8611d8e565b611af0612289565b15611afd57611afd6122ee565b6001600160a01b038416600090815260026020526040902054821115611b5c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610edd565b6001600160a01b038416600090815260026020526040902054611b80908390612fed565b6001600160a01b038516600090815260026020526040812091909155611ba685856123b0565b611bb05782611bbb565b611bbb858585612451565b6001600160a01b038516600090815260026020526040902054909150611be2908290613000565b6001600160a01b0380861660008181526002602052604090819020939093559151908716906000805160206130da83398151915290611c249085815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260026020526040812054821115611ce65760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610edd565b6001600160a01b038416600090815260026020526040902054611d0a908390612fed565b6001600160a01b038086166000908152600260205260408082209390935590851681522054611d3a908390613000565b6001600160a01b0380851660008181526002602052604090819020939093559151908616906000805160206130da83398151915290611d7c9086815260200190565b60405180910390a35060019392505050565b602a54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc9190612e9f565b602b546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e699190613056565b90506000611e7682610eeb565b6000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad549091508110801590611edd57506000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ae548111155b15611ef0576020805460ff60a01b191690555b600160005260246020527fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d6548110801590611f565750600160005260246020527fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d7548111155b15611f6f576020805460ff60a01b1916600160a01b1790555b600260005260246020527f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da548110801590611fd55750600260005260246020527f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db548111155b15611fee576020805460ff60a01b1916600160a11b1790555b600360005260246020527f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf05481108015906120545750600360005260246020527f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf1548111155b1561206d576020805460ff60a01b1916600360a01b1790555b600460005260246020527fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e155481106120b3576020805460ff60a01b1916600160a21b1790555b806022541180156120ce5750602054600160a81b900460ff16155b15612217576000816022546120e39190612fed565b90506000602254826127106120f89190612e50565b6121029190612e67565b905060246000602060149054906101000a900460ff16600481111561212957612129612c62565b600481111561213a5761213a612c62565b815260200190815260200160002060020154811115612214576020805460ff60a81b1916600160a81b1790819055426025819055602855602684905561271090602490600090600160a01b900460ff16600481111561219b5761219b612c62565b60048111156121ac576121ac612c62565b815260200190815260200160002060030154846121c99190612e50565b6121d39190612e67565b6121dd9084613000565b6027556040518381527f1c436e00c3e6a4c9fe8c4b06b059a2cc9039fb62142b6512adfe4fe9c44758589060200160405180910390a15b50505b602054600160a81b900460ff168015612231575060275481115b15611671576020805460ff60a81b191681556000602581905560268190556027554260295560228290556040518281527f7a711ba0fefabae0255256a32733d1e8f7500ae03b42aca2a87876c9d38a2a309101611388565b602b546000906001600160a01b031633148015906122b05750602f5462010000900460ff16155b80156122be5750602f5460ff165b80156122cc57506000601254115b80156122e95750602c543060009081526002602052604090205410155b905090565b602f805462ff000019166201000017905530600090815260026020526040812054601254600e549192916123229084612e50565b61232c9190612e67565b9050600061233a8284612fed565b905080156123905761234b8161280b565b47801561238e576008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561238c573d6000803e3d6000fd5b505b505b811561239f5761239f82612965565b5050602f805462ff00001916905550565b602b54600090600160a01b900460ff166123fd57602b546001600160a01b038481169116148015906123f05750602b546001600160a01b03838116911614155b156123fd57506000610e69565b6001600160a01b03831660009081526004602052604090205460ff168061243c57506001600160a01b03821660009081526004602052604090205460ff165b1561244957506000610e69565b506001610e69565b600080600080602060159054906101000a900460ff168015612475575060135460ff165b1561256c57602b546001600160a01b03878116911614801561249957506000601854115b1561250a576064601854866124ae9190612e50565b6124b89190612e67565b601454909350156124e0576018546014546124d39085612e50565b6124dd9190612e67565b91505b60175415612505576018546017546124f89085612e50565b6125029190612e67565b90505b612659565b601d5415612505576064601d54866125229190612e50565b61252c9190612e67565b6019549093501561255457601d546019546125479085612e50565b6125519190612e67565b91505b601c541561250557601854601c546124f89085612e50565b602b546001600160a01b03878116911614801561258b57506000601254115b156125ea576064601254866125a09190612e50565b6125aa9190612e67565b601154909350156125d2576012546011546125c59085612e50565b6125cf9190612e67565b91505b60105415612505576012546010546124f89085612e50565b600d5415612659576064600d54866126029190612e50565b61260c9190612e67565b600b549093501561263457600d54600b546126279085612e50565b6126319190612e67565b91505b600c541561265957600d54600c5461264c9085612e50565b6126569190612e67565b90505b81156126fd5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612697908390613000565b61dead600081905260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc919091556040516001600160a01b038916906000805160206130da833981519152906126f49086815260200190565b60405180910390a35b801561277757601e546001600160a01b0316600090815260026020526040902054612729908290613000565b601e80546001600160a01b03908116600090815260026020908152604091829020949094559154915184815291811692908a16916000805160206130da833981519152910160405180910390a35b6127818183613000565b61278b9084612fed565b306000908152600260205260409020546127a59190613000565b306000818152600260205260409020919091556001600160a01b0388166000805160206130da8339815191526127db8486613000565b6127e59087612fed565b60405190815260200160405180910390a36128008386612fed565b979650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061284057612840612ebc565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bd9190612e9f565b816001815181106128d0576128d0612ebc565b6001600160a01b039283166020918202929092010152602a546128f691309116846129e4565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061292f90859060009086903090429060040161306f565b600060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050505050565b6000612972600283612e67565b905060006129808284612fed565b90504761298c8361280b565b60006129988247612fed565b90506129a48382612b08565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610edd565b6001600160a01b038216612aa75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610edd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b602a54612b209030906001600160a01b0316846129e4565b602a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612b8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb391906130ab565b5050505050565b600060208083528351808285015260005b81811015612be757858101830151858201604001528201612bcb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461179b57600080fd5b60008060408385031215612c3057600080fd5b8235612c3b81612c08565b946020939093013593505050565b600060208284031215612c5b57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160058310612c9a57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215612cb557600080fd5b8335612cc081612c08565b92506020840135612cd081612c08565b929592945050506040919091013590565b80358015158114612cf157600080fd5b919050565b600060208284031215612d0857600080fd5b61116c82612ce1565b60008060408385031215612d2457600080fd5b8235612d2f81612c08565b9150612d3d60208401612ce1565b90509250929050565b600060208284031215612d5857600080fd5b813561116c81612c08565b60008060008060808587031215612d7957600080fd5b5050823594602084013594506040840135936060013592509050565b803560058110612cf157600080fd5b600080600080600060a08688031215612dbc57600080fd5b612dc586612d95565b97602087013597506040870135966060810135965060800135945092505050565b60008060408385031215612df957600080fd5b8235612e0481612c08565b91506020830135612e1481612c08565b809150509250929050565b600060208284031215612e3157600080fd5b61116c82612d95565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e6957610e69612e3a565b600082612e8457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612eb157600080fd5b815161116c81612c08565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612f0b5781516001600160a01b031687529582019590820190600101612ee6565b509495945050505050565b8281526040602082015260006111696040830184612ed2565b60006020808385031215612f4257600080fd5b825167ffffffffffffffff80821115612f5a57600080fd5b818501915085601f830112612f6e57600080fd5b815181811115612f8057612f80612e89565b8060051b604051601f19603f83011681018181108582111715612fa557612fa5612e89565b604052918252848201925083810185019188831115612fc357600080fd5b938501935b82851015612fe157845184529385019392850192612fc8565b98975050505050505050565b81810381811115610e6957610e69612e3a565b80820180821115610e6957610e69612e3a565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231302560e81b606082015260800190565b60006020828403121561306857600080fd5b5051919050565b85815284602082015260a06040820152600061308e60a0830186612ed2565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156130c057600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e737d14f66d7dbefe0dfa361ae1a791b4ba9371627d9e7fa0f83117cdbb5931964736f6c63430008130033
Deployed Bytecode
0x60806040526004361061046b5760003560e01c80638289aaa01161024a578063c5908e4511610139578063ea3a7828116100b6578063f887ea401161007a578063f887ea4014610d6c578063f8b45b0514610d8c578063f9fb1bcf14610da2578063fdb78c0e14610db8578063fe9fbb8014610dd257600080fd5b8063ea3a782814610c9e578063f11a24d314610cbe578063f2fde38b14610cd4578063f38e28e914610cf4578063f637434214610d5657600080fd5b8063ce541494116100fd578063ce54149414610bf6578063cf21e18e14610c16578063cf68145314610c2c578063dd62ed3e14610c42578063e71dc3f514610c8857600080fd5b8063c5908e4514610b6b578063cb611f4614610b8b578063ccf92ba814610bab578063ce2af1ac14610bcb578063ce31a06b14610be157600080fd5b8063910c6735116101c7578063adb873bd1161018b578063adb873bd14610ad0578063b0d9ae1b14610ae6578063b1a9bad514610afc578063ba625bfe14610b1c578063bca238aa14610b3257600080fd5b8063910c673514610a3757806395d89b4114610a4d578063979e958914610a7a578063a8aa1b3114610a90578063a9059cbb14610ab057600080fd5b80638aec2cb21161020e5780638aec2cb2146109a45780638c0a98e3146109c45780638d38a127146109da5780638da5cb5b146109f95780638ed52bbf14610a1757600080fd5b80638289aaa01461092d5780638346a6c214610943578063866e7cf514610959578063889187451461096f5780638a8c523c1461098f57600080fd5b80633705b392116103665780635e54eee2116102e357806370a08231116102a757806370a0823114610896578063715018a6146108cc57806374858e76146108e157806375f62683146108f7578063778c61521461090d57600080fd5b80635e54eee21461081457806361cf9265146108345780636556fce51461084a578063658d4b7f146108605780636b2fb1241461088057600080fd5b8063537c1ac71161032a578063537c1ac714610787578063571ac8b0146107a75780635962b9d7146107c757806359ec45e1146107e85780635c068a8c146107fe57600080fd5b80633705b392146106e75780633f4218e0146106fd5780634626402b1461072d57806346b99ac21461074d5780634b75b7bc1461076d57600080fd5b806318160ddd116103f457806323f4f9f5116103b857806323f4f9f51461065f5780632d1f0b401461067f578063313ce5671461069557806333e75aca146106b15780633683685a146106c757600080fd5b806318160ddd146105de5780631c2d86ad146105f35780631d407b2d146106095780631f55f48d1461061f57806323b872dd1461063f57600080fd5b806306fdde031161043b57806306fdde0314610504578063095ea7b31461053d5780630b006d601461056d5780630ce906071461058f578063122e9715146105b057600080fd5b8062afb325146104775780630445b667146104a057806306273fc7146104b657806306ee6ad8146104cc57600080fd5b3661047257005b600080fd5b34801561048357600080fd5b5061048d60125481565b6040519081526020015b60405180910390f35b3480156104ac57600080fd5b5061048d602c5481565b3480156104c257600080fd5b5061048d60225481565b3480156104d857600080fd5b50601e546104ec906001600160a01b031681565b6040516001600160a01b039091168152602001610497565b34801561051057600080fd5b506040805180820190915260078152665374616b69667960c81b60208201525b6040516104979190612bba565b34801561054957600080fd5b5061055d610558366004612c1d565b610e02565b6040519015158152602001610497565b34801561057957600080fd5b5061058d610588366004612c49565b610e6f565b005b34801561059b57600080fd5b50602b5461055d90600160a01b900460ff1681565b3480156105bc57600080fd5b506020546105d190600160a01b900460ff1681565b6040516104979190612c78565b3480156105ea57600080fd5b5060015461048d565b3480156105ff57600080fd5b5061048d601b5481565b34801561061557600080fd5b5061048d60255481565b34801561062b57600080fd5b5061048d61063a366004612c49565b610eeb565b34801561064b57600080fd5b5061055d61065a366004612ca0565b611072565b34801561066b57600080fd5b5061058d61067a366004612cf6565b611173565b34801561068b57600080fd5b5061048d60185481565b3480156106a157600080fd5b5060405160128152602001610497565b3480156106bd57600080fd5b5061048d601d5481565b3480156106d357600080fd5b5061058d6106e2366004612d11565b611199565b3480156106f357600080fd5b5061048d600d5481565b34801561070957600080fd5b5061055d610718366004612d46565b60046020526000908152604090205460ff1681565b34801561073957600080fd5b506008546104ec906001600160a01b031681565b34801561075957600080fd5b5061058d610768366004612d63565b6111cc565b34801561077957600080fd5b5060135461055d9060ff1681565b34801561079357600080fd5b5061058d6107a2366004612d46565b611263565b3480156107b357600080fd5b5061055d6107c2366004612d46565b61128d565b3480156107d357600080fd5b5060205461055d90600160a81b900460ff1681565b3480156107f457600080fd5b5061048d60105481565b34801561080a57600080fd5b5061048d600a5481565b34801561082057600080fd5b5061058d61082f366004612d63565b61129b565b34801561084057600080fd5b5061048d601a5481565b34801561085657600080fd5b5061048d60165481565b34801561086c57600080fd5b5061058d61087b366004612d11565b611328565b34801561088c57600080fd5b5061048d600f5481565b3480156108a257600080fd5b5061048d6108b1366004612d46565b6001600160a01b031660009081526002602052604090205490565b3480156108d857600080fd5b5061058d611394565b3480156108ed57600080fd5b5061048d60155481565b34801561090357600080fd5b5061048d601f5481565b34801561091957600080fd5b5061058d610928366004612c49565b6113a8565b34801561093957600080fd5b5061048d60265481565b34801561094f57600080fd5b5061048d60235481565b34801561096557600080fd5b5061048d60275481565b34801561097b57600080fd5b5061058d61098a366004612d63565b61141f565b34801561099b57600080fd5b5061058d6114b1565b3480156109b057600080fd5b5061058d6109bf366004612da4565b6114ce565b3480156109d057600080fd5b5061048d600c5481565b3480156109e657600080fd5b50602f5461055d90610100900460ff1681565b348015610a0557600080fd5b506000546001600160a01b03166104ec565b348015610a2357600080fd5b5061058d610a32366004612c49565b611529565b348015610a4357600080fd5b5061048d60295481565b348015610a5957600080fd5b506040805180820190915260048152635349465960e01b6020820152610530565b348015610a8657600080fd5b5061048d60215481565b348015610a9c57600080fd5b50602b546104ec906001600160a01b031681565b348015610abc57600080fd5b5061055d610acb366004612c1d565b611536565b348015610adc57600080fd5b5061048d60115481565b348015610af257600080fd5b5061048d602d5481565b348015610b0857600080fd5b5061058d610b17366004612d11565b611543565b348015610b2857600080fd5b5061048d60285481565b348015610b3e57600080fd5b5061055d610b4d366004612d46565b6001600160a01b031660009081526004602052604090205460ff1690565b348015610b7757600080fd5b5061058d610b86366004612d11565b611576565b348015610b9757600080fd5b5061058d610ba6366004612d46565b6115a9565b348015610bb757600080fd5b5061058d610bc6366004612cf6565b6115d3565b348015610bd757600080fd5b5061048d601c5481565b348015610bed57600080fd5b5061058d6115ee565b348015610c0257600080fd5b5061058d610c11366004612cf6565b611675565b348015610c2257600080fd5b5061048d60195481565b348015610c3857600080fd5b5061048d60145481565b348015610c4e57600080fd5b5061048d610c5d366004612de6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c9457600080fd5b5061048d600b5481565b348015610caa57600080fd5b5061058d610cb9366004612d63565b6116c4565b348015610cca57600080fd5b5061048d60095481565b348015610ce057600080fd5b5061058d610cef366004612d46565b611725565b348015610d0057600080fd5b50610d36610d0f366004612e1f565b60246020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610497565b348015610d6257600080fd5b5061048d600e5481565b348015610d7857600080fd5b50602a546104ec906001600160a01b031681565b348015610d9857600080fd5b5061048d602e5481565b348015610dae57600080fd5b5061048d60175481565b348015610dc457600080fd5b50602f5461055d9060ff1681565b348015610dde57600080fd5b5061055d610ded366004612d46565b60056020526000908152604090205460ff1681565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e5d9086815260200190565b60405180910390a35060015b92915050565b610e7761179e565b60646001546002610e889190612e50565b610e929190612e67565b811015610ee65760405162461bcd60e51b815260206004820152601f60248201527f4d61782077616c6c65742063616e206e6f74206c657373207468616e2032250060448201526064015b60405180910390fd5b602e55565b604080516002808252606082018352600092839291906020830190803683375050602a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190612e9f565b81600081518110610f9057610f90612ebc565b6001600160a01b0392831660209182029290920181019190915254825191169082906001908110610fc357610fc3612ebc565b6001600160a01b039283166020918202929092010152602a5460405163d06ca61f60e01b8152600092919091169063d06ca61f906110079087908690600401612f16565b600060405180830381865afa158015611024573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261104c9190810190612f2f565b90508060018151811061106157611061612ebc565b602002602001015192505050919050565b6001600160a01b03831660009081526003602090815260408083203384529091528120546000191461115e576001600160a01b038416600090815260036020908152604080832033845290915290205482111561110a5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610edd565b6001600160a01b0384166000908152600360209081526040808320338452909152902054611139908390612fed565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6111698484846117f8565b90505b9392505050565b61117b61179e565b602b8054911515600160a01b0260ff60a01b19909216919091179055565b6111a161179e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6111d461179e565b601484905560158390556016829055601781905580826111f48587613000565b6111fe9190613000565b6112089190613000565b6018819055601e101561125d5760405162461bcd60e51b815260206004820152601f60248201527f466565732063616e206e6f7420626520677261746572207468616e20333025006044820152606401610edd565b50505050565b61126b61179e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e6982600019610e02565b6112a361179e565b600e849055600f8390556011829055601081905580826112c38587613000565b6112cd9190613000565b6112d79190613000565b601255602f54610100900460ff168015611300575042601f54620151806112fe9190613000565b105b1561125d57600a601254111561125d5760405162461bcd60e51b8152600401610edd90613013565b61133061179e565b6001600160a01b038216600081815260046020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991015b60405180910390a15050565b61139c61179e565b6113a66000611c37565b565b6113b061179e565b606460015460016113c19190612e50565b6113cb9190612e67565b81101561141a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782077616c6c65742063616e206e6f74206c657373207468616e203125006044820152606401610edd565b602d55565b61142761179e565b6019849055601a839055601b829055601c81905580826114478587613000565b6114519190613000565b61145b9190613000565b601d556018546014101561125d5760405162461bcd60e51b815260206004820152601f60248201527f466565732063616e206e6f7420626520677261746572207468616e20323025006044820152606401610edd565b6114b961179e565b602f805461ff00191661010017905542601f55565b6114d661179e565b6000602460008760048111156114ee576114ee612c62565b60048111156114ff576114ff612c62565b81526020810191909152604001600020948555506001840192909255600283015560039091015550565b61153161179e565b602355565b600061116c3384846117f8565b61154b61179e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b61157e61179e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6115b161179e565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6115db61179e565b6013805460ff1916911515919091179055565b6115f661179e565b47806116445760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610edd565b604051339082156108fc029083906000818181858888f19350505050158015611671573d6000803e3d6000fd5b5050565b61167d61179e565b602f805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b6116cc61179e565b6009849055600a839055600b829055600c81905580826116ec8587613000565b6116f69190613000565b6117009190613000565b600d819055600a101561125d5760405162461bcd60e51b8152600401610edd90613013565b61172d61179e565b6001600160a01b0381166117925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610edd565b61179b81611c37565b50565b6000546001600160a01b031633146113a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610edd565b602f54600090610100900460ff16611865576001600160a01b03841660009081526005602052604090205460ff166118655760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610edd565b602f5462010000900460ff161561188857611881848484611c87565b905061116c565b6001600160a01b03841660009081526007602052604090205460ff166118fa57602d548211156118fa5760405162461bcd60e51b815260206004820152601860248201527f4d6178207472616e73616374696f6e20657863656564656400000000000000006044820152606401610edd565b6001600160a01b03831660009081526006602052604090205460ff161580156119315750602b546001600160a01b03848116911614155b156119a157602e546001600160a01b03841660009081526002602052604090205461195d908490613000565b11156119a15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610edd565b426023546021546119b29190613000565b1080156119c95750602054600160a81b900460ff16155b80156119dc5750602f54610100900460ff165b15611ad057602a54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190612e9f565b602b546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc9190613056565b9050611ac781610eeb565b60225550426021555b602f54610100900460ff1615611ae857611ae8611d8e565b611af0612289565b15611afd57611afd6122ee565b6001600160a01b038416600090815260026020526040902054821115611b5c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610edd565b6001600160a01b038416600090815260026020526040902054611b80908390612fed565b6001600160a01b038516600090815260026020526040812091909155611ba685856123b0565b611bb05782611bbb565b611bbb858585612451565b6001600160a01b038516600090815260026020526040902054909150611be2908290613000565b6001600160a01b0380861660008181526002602052604090819020939093559151908716906000805160206130da83398151915290611c249085815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260026020526040812054821115611ce65760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610edd565b6001600160a01b038416600090815260026020526040902054611d0a908390612fed565b6001600160a01b038086166000908152600260205260408082209390935590851681522054611d3a908390613000565b6001600160a01b0380851660008181526002602052604090819020939093559151908616906000805160206130da83398151915290611d7c9086815260200190565b60405180910390a35060019392505050565b602a54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015611dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfc9190612e9f565b602b546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015611e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e699190613056565b90506000611e7682610eeb565b6000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ad549091508110801590611edd57506000805260246020527fb7634ec2165a7280a285aac3ec10cf370eca86d8aa9d3243c90b2151434091ae548111155b15611ef0576020805460ff60a01b191690555b600160005260246020527fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d6548110801590611f565750600160005260246020527fbbbb3b1da0cb0951f34c5e9db4606f934b7367b5284f29163e9e6fe67e1e97d7548111155b15611f6f576020805460ff60a01b1916600160a01b1790555b600260005260246020527f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da548110801590611fd55750600260005260246020527f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db548111155b15611fee576020805460ff60a01b1916600160a11b1790555b600360005260246020527f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf05481108015906120545750600360005260246020527f8a6809e43cef135a96df89aa3c0800baae7c497913adf6156625c15a6f57cdf1548111155b1561206d576020805460ff60a01b1916600360a01b1790555b600460005260246020527fe0059098054d65c76a17a4d86f8572395c4d366a1d067b0643b918330bac9e155481106120b3576020805460ff60a01b1916600160a21b1790555b806022541180156120ce5750602054600160a81b900460ff16155b15612217576000816022546120e39190612fed565b90506000602254826127106120f89190612e50565b6121029190612e67565b905060246000602060149054906101000a900460ff16600481111561212957612129612c62565b600481111561213a5761213a612c62565b815260200190815260200160002060020154811115612214576020805460ff60a81b1916600160a81b1790819055426025819055602855602684905561271090602490600090600160a01b900460ff16600481111561219b5761219b612c62565b60048111156121ac576121ac612c62565b815260200190815260200160002060030154846121c99190612e50565b6121d39190612e67565b6121dd9084613000565b6027556040518381527f1c436e00c3e6a4c9fe8c4b06b059a2cc9039fb62142b6512adfe4fe9c44758589060200160405180910390a15b50505b602054600160a81b900460ff168015612231575060275481115b15611671576020805460ff60a81b191681556000602581905560268190556027554260295560228290556040518281527f7a711ba0fefabae0255256a32733d1e8f7500ae03b42aca2a87876c9d38a2a309101611388565b602b546000906001600160a01b031633148015906122b05750602f5462010000900460ff16155b80156122be5750602f5460ff165b80156122cc57506000601254115b80156122e95750602c543060009081526002602052604090205410155b905090565b602f805462ff000019166201000017905530600090815260026020526040812054601254600e549192916123229084612e50565b61232c9190612e67565b9050600061233a8284612fed565b905080156123905761234b8161280b565b47801561238e576008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561238c573d6000803e3d6000fd5b505b505b811561239f5761239f82612965565b5050602f805462ff00001916905550565b602b54600090600160a01b900460ff166123fd57602b546001600160a01b038481169116148015906123f05750602b546001600160a01b03838116911614155b156123fd57506000610e69565b6001600160a01b03831660009081526004602052604090205460ff168061243c57506001600160a01b03821660009081526004602052604090205460ff165b1561244957506000610e69565b506001610e69565b600080600080602060159054906101000a900460ff168015612475575060135460ff165b1561256c57602b546001600160a01b03878116911614801561249957506000601854115b1561250a576064601854866124ae9190612e50565b6124b89190612e67565b601454909350156124e0576018546014546124d39085612e50565b6124dd9190612e67565b91505b60175415612505576018546017546124f89085612e50565b6125029190612e67565b90505b612659565b601d5415612505576064601d54866125229190612e50565b61252c9190612e67565b6019549093501561255457601d546019546125479085612e50565b6125519190612e67565b91505b601c541561250557601854601c546124f89085612e50565b602b546001600160a01b03878116911614801561258b57506000601254115b156125ea576064601254866125a09190612e50565b6125aa9190612e67565b601154909350156125d2576012546011546125c59085612e50565b6125cf9190612e67565b91505b60105415612505576012546010546124f89085612e50565b600d5415612659576064600d54866126029190612e50565b61260c9190612e67565b600b549093501561263457600d54600b546126279085612e50565b6126319190612e67565b91505b600c541561265957600d54600c5461264c9085612e50565b6126569190612e67565b90505b81156126fd5761dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612697908390613000565b61dead600081905260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc919091556040516001600160a01b038916906000805160206130da833981519152906126f49086815260200190565b60405180910390a35b801561277757601e546001600160a01b0316600090815260026020526040902054612729908290613000565b601e80546001600160a01b03908116600090815260026020908152604091829020949094559154915184815291811692908a16916000805160206130da833981519152910160405180910390a35b6127818183613000565b61278b9084612fed565b306000908152600260205260409020546127a59190613000565b306000818152600260205260409020919091556001600160a01b0388166000805160206130da8339815191526127db8486613000565b6127e59087612fed565b60405190815260200160405180910390a36128008386612fed565b979650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061284057612840612ebc565b6001600160a01b03928316602091820292909201810191909152602a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128bd9190612e9f565b816001815181106128d0576128d0612ebc565b6001600160a01b039283166020918202929092010152602a546128f691309116846129e4565b602a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061292f90859060009086903090429060040161306f565b600060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050505050565b6000612972600283612e67565b905060006129808284612fed565b90504761298c8361280b565b60006129988247612fed565b90506129a48382612b08565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610edd565b6001600160a01b038216612aa75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610edd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b602a54612b209030906001600160a01b0316846129e4565b602a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612b8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb391906130ab565b5050505050565b600060208083528351808285015260005b81811015612be757858101830151858201604001528201612bcb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461179b57600080fd5b60008060408385031215612c3057600080fd5b8235612c3b81612c08565b946020939093013593505050565b600060208284031215612c5b57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160058310612c9a57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215612cb557600080fd5b8335612cc081612c08565b92506020840135612cd081612c08565b929592945050506040919091013590565b80358015158114612cf157600080fd5b919050565b600060208284031215612d0857600080fd5b61116c82612ce1565b60008060408385031215612d2457600080fd5b8235612d2f81612c08565b9150612d3d60208401612ce1565b90509250929050565b600060208284031215612d5857600080fd5b813561116c81612c08565b60008060008060808587031215612d7957600080fd5b5050823594602084013594506040840135936060013592509050565b803560058110612cf157600080fd5b600080600080600060a08688031215612dbc57600080fd5b612dc586612d95565b97602087013597506040870135966060810135965060800135945092505050565b60008060408385031215612df957600080fd5b8235612e0481612c08565b91506020830135612e1481612c08565b809150509250929050565b600060208284031215612e3157600080fd5b61116c82612d95565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e6957610e69612e3a565b600082612e8457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612eb157600080fd5b815161116c81612c08565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015612f0b5781516001600160a01b031687529582019590820190600101612ee6565b509495945050505050565b8281526040602082015260006111696040830184612ed2565b60006020808385031215612f4257600080fd5b825167ffffffffffffffff80821115612f5a57600080fd5b818501915085601f830112612f6e57600080fd5b815181811115612f8057612f80612e89565b8060051b604051601f19603f83011681018181108582111715612fa557612fa5612e89565b604052918252848201925083810185019188831115612fc357600080fd5b938501935b82851015612fe157845184529385019392850192612fc8565b98975050505050505050565b81810381811115610e6957610e69612e3a565b80820180821115610e6957610e69612e3a565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231302560e81b606082015260800190565b60006020828403121561306857600080fd5b5051919050565b85815284602082015260a06040820152600061308e60a0830186612ed2565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156130c057600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e737d14f66d7dbefe0dfa361ae1a791b4ba9371627d9e7fa0f83117cdbb5931964736f6c63430008130033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.