BNB Price: $631.60 (+0.65%)
 

Overview

Max Total Supply

1,000,000,000CatKing

Holders

4,965

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,011,597.633695213078917696 CatKing

Value
$0.00
0x215cbb43bec7ccdc19dc83fd3db0ec7b0ffcfc1e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Token.sol
/**
 *Submitted for verification at BscScan.com on 2026-03-13
 */

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

interface IERC20 {
    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface ISwapRouter {
    function WETH() external pure returns (address);
    function factory() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    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);
}

interface ISwapFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function feeTo() external view returns (address);
}

interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function totalSupply() external view returns (uint);

    function balanceOf(address account) external view returns (uint256);

    function kLast() external view returns (uint);

    function sync() external;
}

abstract contract Ownable {
    address internal _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0xdead), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "!o");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0xdead));
        _owner = address(0xdead);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0xdead), "n0xdea");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

contract TokenDistributor {
    constructor(address _usdt) {
        IERC20(_usdt).approve(msg.sender, ~uint256(0));
    }
}
interface IDividendTracker {
    function setPair(address _pair, address _token) external;
    function addLpProvider(address adr) external;
    function setExcludeLPProvider(address addr, bool enable) external;
    function process(uint256 gas) external;
}
interface IDividendZeroTracker {
    function recordBurn(address addr, uint256 amount) external;
    function process(uint256 gas) external;
    function setBurnToken(address _burnToken) external;
}
abstract contract AbsToken is IERC20, Ownable {
    struct UserInfo {
        uint256 lpAmount;
        uint256 preLPAmount;
    }

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address public fundAddress;
    address public teamAddress;
    address public maintenanceAddress;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _sellScriptList;

    mapping(address => bool) public _blackList;

    uint256 private _tTotal;

    ISwapRouter private immutable _swapRouter;
    address private immutable _usdt;

    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _buyLPDividendFee = 0;
    uint256 private _buyLPFee = 0;
    uint256 private _buyBuybackFee = 0;
    uint256 private _buyFundFee = 300;
    uint256 public _totalBuyFees = 300;

    uint256 private _sellLPDividendFee = 0;
    uint256 private _sellLPFee = 0;
    uint256 private _sellBuybackFee = 0;
    uint256 private _sellFundFee = 600;
    uint256 public _totalSellFees = 600;

    uint256 public startTradeBlock;
    uint256 public startAddLPBlock;

    address public immutable _mainPair;

    uint256 private constant _killBlock = 3;
    mapping(address => UserInfo) private _userInfo;

    mapping(address => bool) public _swapRouters;
    bool public _strictCheck = false;
    address public _sellDistributor;

    mapping(address => bool) public isMaxEatExempt;
    bool public enableWalletLimit;
    uint256 public maxWalletAmount;
    uint256 public trackIdx = 0;
    TokenDistributor public immutable _feeDistributor;

    address public _lockAddress = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE;
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }
    IDividendTracker public dividendTracker;
    IDividendZeroTracker public dividendZeroTracker;
    constructor(
        string memory Name,
        string memory Symbol,
        uint8 Decimals,
        uint256 Supply,
        address ReceiveAddress,
        address FundAddress,
        address TeamAddress,
        address MaintenanceAddress
    ) {
        _name = Name;
        _symbol = Symbol;
        _decimals = Decimals;
        _usdt = block.chainid == 56
            ? 0x55d398326f99059fF775485246999027B3197955
            : 0xaB1a4d4f1D656d2450692D237fdD6C7f9146e814;
        address RouterAddress = block.chainid == 56
            ? 0x10ED43C718714eb63d5aA57B78B54704E256024E
            : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;

        ISwapRouter swapRouter = ISwapRouter(RouterAddress);

        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        _swapRouters[address(swapRouter)] = true;
        IERC20(_usdt).approve(address(swapRouter), MAX);
        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address pair = swapFactory.createPair(address(this), _usdt);
        _swapPairList[pair] = true;
        // require(address(this) > _usdt, "s");
        _mainPair = pair;
        uint256 tokenUnit = 10 ** Decimals;
        uint256 total = Supply * tokenUnit;
        _tTotal = total;

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);

        fundAddress = FundAddress;
        teamAddress = TeamAddress;
        maintenanceAddress = MaintenanceAddress;
        _feeWhiteList[FundAddress] = true;
        _feeWhiteList[TeamAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[MaintenanceAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[address(0)] = true;
        _feeWhiteList[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        isMaxEatExempt[FundAddress] = true;
        isMaxEatExempt[TeamAddress] = true;
        isMaxEatExempt[ReceiveAddress] = true;
        isMaxEatExempt[MaintenanceAddress] = true;
        isMaxEatExempt[address(this)] = true;
        isMaxEatExempt[address(_mainPair)] = true;
        isMaxEatExempt[address(swapRouter)] = true;
        isMaxEatExempt[msg.sender] = true;
        isMaxEatExempt[address(0)] = true;
        isMaxEatExempt[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _userInfo[FundAddress].lpAmount = MAX / 10;
        _userInfo[TeamAddress].lpAmount = MAX / 10;
        _totalBuyFees =
            _buyLPFee +
            _buyLPDividendFee +
            _buyBuybackFee +
            _buyFundFee;
        _totalSellFees =
            _sellLPFee +
            _sellLPDividendFee +
            _sellBuybackFee +
            _sellFundFee;

        _feeDistributor = new TokenDistributor(_usdt);
        _feeWhiteList[address(_feeDistributor)] = true;
        isMaxEatExempt[address(_feeDistributor)] = true;
    }
    function initDividendTracker(
        address _dividendTrackerAddress
    ) public onlyOwner {
        // require(address(dividendTracker) == address(0), "dividendTracker already initialized");
        dividendTracker = IDividendTracker(_dividendTrackerAddress);
        dividendTracker.setPair(_mainPair, address(this));
        dividendTracker.setExcludeLPProvider(address(0), true);
        dividendTracker.setExcludeLPProvider(address(0xdead), true);
        dividendTracker.setExcludeLPProvider(address(this), true);
        dividendTracker.setExcludeLPProvider(address(_lockAddress), true);
        dividendTracker.setExcludeLPProvider(address(_mainPair), true);
        dividendTracker.addLpProvider(fundAddress);
        dividendTracker.addLpProvider(teamAddress);
        dividendTracker.addLpProvider(msg.sender);
        isMaxEatExempt[address(dividendTracker)];
    }
    function initDividendZeroTracker(
        address _dividendZeroTrackerAddress
    ) public onlyOwner {
        dividendZeroTracker = IDividendZeroTracker(_dividendZeroTrackerAddress);
        dividendZeroTracker.setBurnToken(address(this));
    }
    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

    function decimals() external view override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        uint256 balance = _balances[account];
        return balance;
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }
    modifier onlyRepairWalletOrOwner() {
        require(
            owner() == msg.sender || maintenanceAddress == msg.sender,
            "Only owner or maintenance wallet can call this function"
        );
        _;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _withdraw(address from, uint256 amount) private {
        require(startTradeBlock > 0, "not Launch");
        _standTransfer(from, address(this), amount);
        uint256 outUsdt = getWithdrawOut(amount);
        require(outUsdt > 0, "out 0");
        require(
            IERC20(_usdt).balanceOf(address(this)) >= outUsdt,
            "usdt not enough"
        );
        uint256 feeUsdt = 0;
        if (!_feeWhiteList[from]) {
            feeUsdt = (_totalSellFees * outUsdt) / 10000;
            _safeTransfer(_usdt, fundAddress, feeUsdt);
        }
        _safeTransfer(_usdt, from, outUsdt - feeUsdt);
        _standTransfer(address(this), address(0xdead), amount);
    }

    uint256 public TuoDiTotal = 300;

    function setTuoDiTotal(uint256 n) external onlyRepairWalletOrOwner {
        require(n > 0, "invalid total");
        TuoDiTotal = n;
    }

    function getTuoDiTotal() public view returns (uint256) {
        return TuoDiTotal * 10 ** 18;
    }
    function getWithdrawOut(uint256 amountIn) public view returns (uint256) {
        return
            (amountIn * IERC20(_usdt).balanceOf(address(this))) /
            getTuoDiTotal();
    }
    function _transfer(address from, address to, uint256 amount) private {
        require(!_blackList[from], "blackList");
        uint256 balance = balanceOf(from);
        require(balance >= amount, "BNE");
        bool takeFee;

        if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
            if (address(_swapRouter) != from) {
                takeFee = true;
            }
        }

        address txOrigin = tx.origin;
        if (txOrigin == from && msg.sender == from && to == address(this)) {
            _withdraw(from, amount);
            return;
        }
        if (txOrigin == from && msg.sender == from && to == address(0x0) && !_feeWhiteList[from]) {
            _standTransfer(from, address(0x0), amount);
            dividendZeroTracker.recordBurn(txOrigin, amount);
            return;
        }

        UserInfo storage userInfo;
        uint256 addLPLiquidity;
        if (to == _mainPair && _swapRouters[msg.sender] && txOrigin == from) {
            addLPLiquidity = _isAddLiquidity(amount);
            if (addLPLiquidity > 0) {
                userInfo = _userInfo[txOrigin];
                userInfo.lpAmount += addLPLiquidity;
                if (0 == startTradeBlock) {
                    userInfo.preLPAmount += addLPLiquidity;
                }
            }
        }

        uint256 removeLPLiquidity;
        if (from == _mainPair) {
            removeLPLiquidity = _isRemoveLiquidity(amount);
            if (removeLPLiquidity > 0) {
                require(_userInfo[txOrigin].lpAmount >= removeLPLiquidity);
                _userInfo[txOrigin].lpAmount -= removeLPLiquidity;
                if (_feeWhiteList[txOrigin]) {
                    takeFee = false;
                }
            }
        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (0 == startAddLPBlock) {
                if (_feeWhiteList[from] && to == _mainPair) {
                    startAddLPBlock = block.number;
                }
            }

            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (0 == startTradeBlock) {
                    require((0 < startAddLPBlock && addLPLiquidity > 0));
                } else {
                    if (
                        0 == addLPLiquidity &&
                        0 == removeLPLiquidity &&
                        block.number < startTradeBlock + _killBlock
                    ) {
                        _killTransfer(from, to, amount, 99);
                        return;
                    }
                }
            }
        }

        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            addLPLiquidity,
            removeLPLiquidity
        );

        if (from != address(this)) {
            if (addLPLiquidity > 0) {
                dividendTracker.addLpProvider(txOrigin);
            }

            uint256 rewardGas = _rewardGas;
            if (trackIdx == 0) {
                try dividendTracker.process((rewardGas * 100) / 100) {
                    trackIdx = 1;
                } catch {
                    emit processFailed();
                }
            } else {
                try dividendZeroTracker.process((rewardGas * 100) / 100) {
                    trackIdx = 0;
                } catch {
                    emit processZeroFailed();
                }
            }
        }
    }
    event processFailed();
    event processZeroFailed();
    function _isAddLiquidity(
        uint256 amount
    ) internal view returns (uint256 liquidity) {
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        uint256 amountOther;
        if (rOther > 0 && rThis > 0) {
            amountOther = (amount * rOther) / rThis;
        }
        if (balanceOther > 0 && balanceOther >= rOther + amountOther) {
            (liquidity, ) = calLiquidity(balanceOther, amount, rOther, rThis);
        }
    }

    function _isRemoveLiquidity(
        uint256 amount
    ) internal view returns (uint256 liquidity) {
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        if (balanceOther < rOther) {
            liquidity =
                (amount * ISwapPair(_mainPair).totalSupply()) /
                (balanceOf(_mainPair) - amount);
        } else if (_strictCheck) {
            uint256 amountOther;
            if (rOther > 0 && rThis > 0) {
                amountOther = (amount * rOther) / (rThis - amount);
                require(balanceOther >= amountOther + rOther);
            }
        }
    }

    function setAddLpCheck(bool enable) external onlyOwner {
        _strictCheck = enable;
    }
    function calLiquidity(
        uint256 balanceA,
        uint256 amount,
        uint256 r0,
        uint256 r1
    ) private view returns (uint256 liquidity, uint256 feeToLiquidity) {
        uint256 pairTotalSupply = ISwapPair(_mainPair).totalSupply();
        address feeTo = ISwapFactory(_swapRouter.factory()).feeTo();
        bool feeOn = feeTo != address(0);
        uint256 _kLast = ISwapPair(_mainPair).kLast();
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(r0 * r1);
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator;
                    uint256 denominator;
                    if (
                        address(_swapRouter) ==
                        address(0x10ED43C718714eb63d5aA57B78B54704E256024E)
                    ) {
                        // BSC Pancake
                        numerator = pairTotalSupply * (rootK - rootKLast) * 8;
                        denominator = rootK * 17 + (rootKLast * 8);
                    } else if (
                        address(_swapRouter) ==
                        address(0xD99D1c33F9fC3444f8101754aBC46c52416550D1)
                    ) {
                        //BSC testnet Pancake
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 3 + rootKLast;
                    } else if (
                        address(_swapRouter) ==
                        address(0xE9d6f80028671279a28790bb4007B10B0595Def1)
                    ) {
                        //PG W3Swap
                        numerator = pairTotalSupply * (rootK - rootKLast) * 3;
                        denominator = rootK * 5 + rootKLast;
                    } else {
                        //SushiSwap,UniSwap,OK Cherry Swap
                        numerator = pairTotalSupply * (rootK - rootKLast);
                        denominator = rootK * 5 + rootKLast;
                    }
                    feeToLiquidity = numerator / denominator;
                    if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
                }
            }
        }
        uint256 amount0 = balanceA - r0;
        if (pairTotalSupply == 0) {
            liquidity = Math.sqrt(amount0 * amount) - 1000;
        } else {
            liquidity = Math.min(
                (amount0 * pairTotalSupply) / r0,
                (amount * pairTotalSupply) / r1
            );
        }
    }

    function _getReserves()
        public
        view
        returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
    {
        (rOther, rThis) = __getReserves();
        balanceOther = IERC20(_usdt).balanceOf(_mainPair);
    }

    function __getReserves()
        public
        view
        returns (uint256 rOther, uint256 rThis)
    {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = _usdt;
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }
    }

    function _killTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        uint256 fee
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = (tAmount * fee) / 100;
        if (feeAmount > 0) {
            _takeTransfer(sender, teamAddress, feeAmount);
        }
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function _standTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        _takeTransfer(sender, recipient, tAmount);
    }
    event BuyOrSell(address indexed user, uint256 value, uint256 symbol);
    uint256 public _sellRate = 8000;
    uint256 public _sellBurnRate = 10000;

    function setSellRate(uint256 rate) external onlyOwner {
        _sellRate = rate;
    }

    function setSellBurnRate(uint256 rate) external onlyRepairWalletOrOwner {
        _sellBurnRate = rate;
    }
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        uint256 addLPLiquidity,
        uint256 removeLPLiquidity
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            bool isSell;
            uint256 swapFeeAmount;
            uint256 destroyFeeAmount;
            if (addLPLiquidity > 0) {} else if (removeLPLiquidity > 0) {
                feeAmount += _calRemoveFeeAmount(
                    sender,
                    tAmount,
                    removeLPLiquidity
                );
            } else if (_swapPairList[recipient]) {
                //Sell
                isSell = true;
                swapFeeAmount = (tAmount * _totalSellFees) / 10000;
                destroyFeeAmount = (tAmount * _sellBuybackFee) / 10000;
                swapFeeAmount -= destroyFeeAmount;
                // emit BuyOrSell(sender, tAmount, 2);
            } else if (_swapPairList[sender]) {
                //Buy
                swapFeeAmount = (tAmount * _totalBuyFees) / 10000;
                destroyFeeAmount = (tAmount * _buyBuybackFee) / 10000;
                swapFeeAmount -= destroyFeeAmount;
                // emit BuyOrSell(recipient, tAmount, 1);
            } else {
                //Transfer
                swapFeeAmount = (tAmount * _transferFee) / 10000;
            }
            if (destroyFeeAmount > 0) {
                feeAmount += destroyFeeAmount;
                // _takeTransfer(sender, address(0xdead), destroyFeeAmount);
                _takeTransfer(sender, address(0xdead), destroyFeeAmount);
            }
            if (swapFeeAmount > 0) {
                feeAmount += swapFeeAmount;
                // _takeTransfer(sender, address(_feeDistributor), swapFeeAmount);
                _takeTransfer(sender, teamAddress, swapFeeAmount);
            }

            if (!isMaxEatExempt[recipient] && enableWalletLimit) {
                require(
                    (_balances[recipient] + tAmount - feeAmount) <=
                        maxWalletAmount,
                    "over max wallet limit"
                );
            }
        }
        if (_swapPairList[sender] && !_sellScriptList[recipient]) {
            //Buy
            emit BuyOrSell(recipient, tAmount - feeAmount, 1);
        }
        if (_swapPairList[recipient] && !_sellScriptList[sender]) {
            //Sell
            emit BuyOrSell(recipient, tAmount - feeAmount, 2);
        }
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    uint256 public _removeLPFee = 10000;
    // uint256 public _removePreLPFee = 10000;
    uint256 public _removePreLPFee = 10000;
    function setRemoveLPFee(uint256 fee) external onlyOwner {
        _removeLPFee = fee;
    }
    function setRemovePreLPFee(uint256 fee) external onlyOwner {
        _removePreLPFee = fee;
    }
    function _calRemoveFeeAmount(
        address sender,
        uint256 tAmount,
        uint256 removeLPLiquidity
    ) private returns (uint256 feeAmount) {
        UserInfo storage userInfo = _userInfo[tx.origin];
        uint256 selfLPAmount = userInfo.lpAmount +
            removeLPLiquidity -
            userInfo.preLPAmount;
        uint256 removeLockLPAmount = removeLPLiquidity;
        uint256 removeSelfLPAmount = removeLPLiquidity;
        if (removeLPLiquidity > selfLPAmount) {
            removeSelfLPAmount = selfLPAmount;
        }
        uint256 lpFeeAmount;
        if (removeSelfLPAmount > 0) {
            removeLockLPAmount -= removeSelfLPAmount;
            lpFeeAmount =
                (((tAmount * removeSelfLPAmount) / removeLPLiquidity) *
                    _removeLPFee) /
                10000;
            feeAmount += lpFeeAmount;
            if (lpFeeAmount > 0) {
                _takeTransfer(sender, address(0xdead), lpFeeAmount);
            }
        }
        uint256 destroyFeeAmount = (((tAmount * removeLockLPAmount) /
            removeLPLiquidity) * _removePreLPFee) / 10000;
        if (destroyFeeAmount > 0) {
            feeAmount += destroyFeeAmount;
            _takeTransfer(sender, address(0xdead), destroyFeeAmount);
        }
        userInfo.preLPAmount -= removeLockLPAmount;
    }
    function swapTokenForFund_auto(uint256 tAmount) external {
        require(_sellScriptList[msg.sender]);
        uint256 contractTokenBalance = balanceOf(_sellDistributor);
        uint256 contractSellAmount = (tAmount * _sellRate) / 10000;
        if (contractSellAmount > contractTokenBalance) {
            contractSellAmount = contractTokenBalance;
        }
        if (contractSellAmount > 0) {
            _standTransfer(
                address(_sellDistributor),
                address(this),
                contractSellAmount
            );
        }
        swapTokenForFund(contractSellAmount);
    }

    // uint256 public _lpDividendRate = 3375;
    // uint256 public _teamRate = 750;
    // uint256 public _tuidiRate = 2500;
    // uint256 public _hdzeroRate = 3375;
    // uint256 public _otherRate = 0;
    uint256 public _lpDividendRate = 3375;
    uint256 public _teamRate = 750;
    uint256 public _tuidiRate = 2500;
    uint256 public _hdzeroRate = 3375;
    uint256 public _otherRate = 0;
    address public otherAddress;
    function setRate(
        uint256 lpDividendRate,
        uint256 teamRate,
        uint256 tuidiRate,
        uint256 hdzeroRate,
        uint256 otherRate
    ) external onlyRepairWalletOrOwner {
        require(
            lpDividendRate + teamRate + tuidiRate + hdzeroRate + otherRate <= 10000,
            "total rate error"
        );
        _lpDividendRate = lpDividendRate;
        _teamRate = teamRate;
        _tuidiRate = tuidiRate;
        _hdzeroRate = hdzeroRate;
        _otherRate = otherRate;
    }
    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (0 == tokenAmount) {
            return;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _usdt;

        _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_feeDistributor),
            block.timestamp
        );
        uint256 usdtBalance = IERC20(_usdt).balanceOf(address(_feeDistributor));
        if (usdtBalance != 0) {
            _safeTransferFrom(
                _usdt,
                address(_feeDistributor),
                address(this),
                usdtBalance
            );
        }
        uint256 totalFee = _lpDividendRate +
            _teamRate +
            _tuidiRate +
            _hdzeroRate +
            _otherRate;
        uint256 lpDividendUsdt;
        uint256 teamUsdt;
        uint256 tuidiUsdt;
        uint256 hdzeroUsdt;
        uint256 otherUsdt;
        if (usdtBalance > 0 && totalFee > 0) {
            lpDividendUsdt = (usdtBalance * _lpDividendRate) / totalFee;
            teamUsdt = (usdtBalance * _teamRate) / totalFee;
            hdzeroUsdt = (usdtBalance * _hdzeroRate) / totalFee;
            otherUsdt = (usdtBalance * _otherRate) / totalFee;

            tuidiUsdt = usdtBalance - lpDividendUsdt - teamUsdt - hdzeroUsdt - otherUsdt;

            if (lpDividendUsdt > 0) {
                _safeTransfer(_usdt, address(dividendTracker), lpDividendUsdt);
            }
            if (teamUsdt > 0) {
                _safeTransfer(_usdt, fundAddress, teamUsdt);
            }
            if (hdzeroUsdt > 0) {
                _safeTransfer(_usdt, address(dividendZeroTracker), hdzeroUsdt);
            }
            if(otherUsdt > 0){
                _safeTransfer(_usdt, otherAddress, otherUsdt);
            }
            if (tuidiUsdt > 0) {
                // _safeTransfer(_usdt, address(this), tuidiUsdt);
            }
        }
        if (tokenAmount > 0) {
            _standTransfer(
                _mainPair,
                _sellDistributor,
                (tokenAmount * _sellBurnRate) / 10000
            );
            ISwapPair(_mainPair).sync();
        }
    }
    function setOtherAddress(address addr) external onlyRepairWalletOrOwner {
        otherAddress = addr;
        _feeWhiteList[addr] = true;
    }
    function _safeTransferFrom(
        address token,
        address from,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, ) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        if (success) {}
    }

    function _safeTransfer(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        if (success && data.length > 0) {}
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setFundAddress(address addr) external onlyOwner {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
        _userInfo[fundAddress].lpAmount = MAX / 10;
    }
    function setTeamAddress(address addr) external onlyOwner {
        teamAddress = addr;
        _feeWhiteList[addr] = true;
        _userInfo[teamAddress].lpAmount = MAX / 10;
    }
    function setMaintenanceAddress(address addr) external onlyOwner {
        maintenanceAddress = addr;
        _feeWhiteList[addr] = true;
        _userInfo[maintenanceAddress].lpAmount = MAX / 10;
    }

    uint256 public _transferFee = 0;

    function startTrade(bool _start) external onlyOwner {
        if (_start) {
            startTradeBlock = block.number;
        } else {
            startTradeBlock = 0;
        }
    }

    function batchSetFeeWhiteList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }
    function batchSetSellScriptList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _sellScriptList[addr[i]] = enable;
            _feeWhiteList[addr[i]] = enable;
        }
    }
    function batchSetBlackList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            _blackList[addr[i]] = enable;
        }
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }
    function setEnableWalletLimit(bool enable) public onlyOwner {
        enableWalletLimit = enable;
    }
    function batchsetisMaxEatExemptList(
        address[] memory addr,
        bool enable
    ) external onlyOwner {
        for (uint i = 0; i < addr.length; i++) {
            isMaxEatExempt[addr[i]] = enable;
        }
    }

    function setSellDistributor(address addr) external onlyOwner {
        _sellDistributor = addr;
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }
    function _safeTransferETH(address to, uint256 value) internal {
        if (address(0) == to) {
            return;
        }
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "ETF");
    }

    function claimToken(
        address token,
        uint256 amount,
        address payable to
    ) public onlyRepairWalletOrOwner {
        require(token != _usdt, "token error");
        _safeTransfer(token, to, amount);
        _safeTransferETH(to, address(this).balance);
    }

    receive() external payable {}

    function claimSellDistributor(
        uint256 amount,
        address addr
    ) external onlyRepairWalletOrOwner {
        _standTransfer(_sellDistributor, addr, amount);
    }

    function updateLPAmount(
        address account,
        uint256 lpAmount
    ) public onlyOwner {
        UserInfo storage userInfo = _userInfo[account];
        userInfo.lpAmount = lpAmount;
        dividendTracker.addLpProvider(account);
    }

    function getUserInfo(
        address account
    )
        public
        view
        returns (uint256 lpAmount, uint256 lpBalance, uint256 preLPAmount)
    {
        lpBalance = IERC20(_mainPair).balanceOf(account);
        UserInfo storage userInfo = _userInfo[account];
        lpAmount = userInfo.lpAmount;
        preLPAmount = userInfo.preLPAmount;
    }

    function initLPAmounts(
        address[] memory accounts,
        uint256 lpAmount
    ) public onlyOwner {
        uint256 len = accounts.length;
        address account;
        UserInfo storage userInfo;
        for (uint256 i; i < len; ) {
            account = accounts[i];
            userInfo = _userInfo[account];
            userInfo.lpAmount = lpAmount;
            userInfo.preLPAmount = lpAmount;
            dividendTracker.addLpProvider(account);
            unchecked {
                ++i;
            }
        }
    }

    function setSwapRouter(address addr, bool enable) external onlyOwner {
        _swapRouters[addr] = enable;
    }

    uint256 public _rewardGas = 800000;

    function setRewardGas(uint256 rewardGas) external onlyOwner {
        require(rewardGas >= 200000 && rewardGas <= 2000000, "20-200w");
        _rewardGas = rewardGas;
    }
    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        _buyLPFee = customs[0];
        _buyLPDividendFee = customs[1];
        _buyBuybackFee = customs[2];
        _buyFundFee = customs[3];

        _sellLPFee = customs[4];
        _sellLPDividendFee = customs[5];
        _sellBuybackFee = customs[6];
        _sellFundFee = customs[7];

        _totalBuyFees =
            _buyLPFee +
            _buyLPDividendFee +
            _buyBuybackFee +
            _buyFundFee;

        _totalSellFees =
            _sellLPFee +
            _sellLPDividendFee +
            _sellBuybackFee +
            _sellFundFee;
    }

    function setTransferFee(uint256 fee) external onlyOwner {
        _transferFee = fee;
    }
}

contract Token is AbsToken {
    constructor()
        AbsToken(
            unicode"CatKing",
            unicode"CatKing",
            18,
            1000000000,
            address(0x93F887F616DB5a71D04A7C63f5Dc9654846bf9cD),
            address(0x93F887F616DB5a71D04A7C63f5Dc9654846bf9cD),
            address(0x215CBB43Bec7Ccdc19Dc83Fd3dB0ec7B0ffCFc1E),
            address(0x9517e893D8e0d9b1668d1F81d74723b8D883A3e0)
        )
    {}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"symbol","type":"uint256"}],"name":"BuyOrSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"processFailed","type":"event"},{"anonymous":false,"inputs":[],"name":"processZeroFailed","type":"event"},{"inputs":[],"name":"TuoDiTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"__getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hdzeroRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lpDividendRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_otherRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removePreLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellScriptList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_strictCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tuidiRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchSetSellScriptList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"batchsetisMaxEatExemptList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"claimSellDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract IDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendZeroTracker","outputs":[{"internalType":"contract IDividendZeroTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTuoDiTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"lpAmount","type":"uint256"},{"internalType":"uint256","name":"lpBalance","type":"uint256"},{"internalType":"uint256","name":"preLPAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getWithdrawOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dividendTrackerAddress","type":"address"}],"name":"initDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dividendZeroTrackerAddress","type":"address"}],"name":"initDividendZeroTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"initLPAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maintenanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"otherAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setAddLpCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setMaintenanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOtherAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpDividendRate","type":"uint256"},{"internalType":"uint256","name":"teamRate","type":"uint256"},{"internalType":"uint256","name":"tuidiRate","type":"uint256"},{"internalType":"uint256","name":"hdzeroRate","type":"uint256"},{"internalType":"uint256","name":"otherRate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemoveLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRemovePreLPFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setSellBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSellDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"setTuoDiTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startAddLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"swapTokenForFund_auto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trackIdx","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"updateLPAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101006040526000600f8190556010819055601181905561012c601281905560138190556014829055601582905560168290556102586017819055601855601d805460ff191690556021829055602280546001600160a01b03191673407993575c91ce7643a4d4ccacc9a98c36ee1bbe179055602555611f4060265561271060278190556028819055602955610d2f602a8190556102ee602b556109c4602c55602d55602e819055603055620c3500603155348015620000be57600080fd5b506040805180820182526007808252664361744b696e6760c81b602080840182905284518086018652928352820152600080546001600160a01b031916339081178255935192939192601292633b9aca00927393f887f616db5a71d04a7c63f5dc9654846bf9cd92839273215cbb43bec7ccdc19dc83fd3db0ec7b0ffcfc1e92739517e893d8e0d9b1668d1f81d74723b8d883a3e092829161dead917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35060066200018d898262000b4b565b5060076200019c888262000b4b565b506008805460ff191660ff881617905546603814620001d05773ab1a4d4f1d656d2450692d237fdd6c7f9146e814620001e6565b7355d398326f99059ff775485246999027b31979555b6001600160a01b031660a052600060384614620002185773d99d1c33f9fc3444f8101754abc46c52416550d16200022e565b7310ed43c718714eb63d5aa57b78b54704e256024e5b6001600160a01b038181166080819052306000908152600260209081526040808320848452825280832060001990819055601c90925291829020805460ff1916600117905560a051915163095ea7b360e01b81526004810193909352602483015292935083929091169063095ea7b3906044016020604051808303816000875af1158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000c17565b506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000c42565b60a0516040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192506000919083169063c9c65396906044016020604051808303816000875af1158015620003a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ce919062000c42565b6001600160a01b0381166000818152600d60205260408120805460ff1916600117905560c091909152909150620004078b600a62000d82565b9050600062000417828c62000d93565b600c8190556001600160a01b038b166000818152600160205260408082208490555192935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200046e9085815260200190565b60405180910390a388600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087600460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600560006101000a8154816001600160a01b0302191690836001600160a01b031602179055506001600960008b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000306001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000806001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600061dead6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e60008b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e60008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e6000896001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e6000306001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e600060c0516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e6000876001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e6000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e6000806001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601e600061dead6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600a6000196200095e919062000dad565b6001600160a01b038a166000908152601b602052604090205562000986600a60001962000dad565b6001600160a01b0389166000908152601b6020526040902055601254601154600f54601054620009b7919062000dd0565b620009c3919062000dd0565b620009cf919062000dd0565b601355601754601654601454601554620009ea919062000dd0565b620009f6919062000dd0565b62000a02919062000dd0565b60185560a05160405162000a169062000a98565b6001600160a01b039091168152602001604051809103906000f08015801562000a43573d6000803e3d6000fd5b506001600160a01b031660e081905260009081526009602090815260408083208054600160ff199182168117909255601e9093529220805490911690911790555062000de69c50505050505050505050505050565b6101478062005bf183390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ad157607f821691505b60208210810362000af257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b4657600081815260208120601f850160051c8101602086101562000b215750805b601f850160051c820191505b8181101562000b425782815560010162000b2d565b5050505b505050565b81516001600160401b0381111562000b675762000b6762000aa6565b62000b7f8162000b78845462000abc565b8462000af8565b602080601f83116001811462000bb7576000841562000b9e5750858301515b600019600386901b1c1916600185901b17855562000b42565b600085815260208120601f198616915b8281101562000be85788860151825594840194600190910190840162000bc7565b508582101562000c075787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c2a57600080fd5b8151801515811462000c3b57600080fd5b9392505050565b60006020828403121562000c5557600080fd5b81516001600160a01b038116811462000c3b57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000cc457816000190482111562000ca85762000ca862000c6d565b8085161562000cb657918102915b93841c939080029062000c88565b509250929050565b60008262000cdd5750600162000d7c565b8162000cec5750600062000d7c565b816001811462000d05576002811462000d105762000d30565b600191505062000d7c565b60ff84111562000d245762000d2462000c6d565b50506001821b62000d7c565b5060208310610133831016604e8410600b841016171562000d55575081810a62000d7c565b62000d61838362000c83565b806000190482111562000d785762000d7862000c6d565b0290505b92915050565b600062000c3b60ff84168362000ccc565b808202811582820484141762000d7c5762000d7c62000c6d565b60008262000dcb57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000d7c5762000d7c62000c6d565b60805160a05160c05160e051614cdc62000f156000396000818161097f0152818161314f015281816131c0015261328601526000818161076701528181610fc6015281816111de015281816116ae01528181611b43015281816124f901528181612b2201528181612bfc01528181612d2f0152818161349f015281816134f601528181613999015281816139df0152818161400d0152614194015260008181611bdc01528181611f390152818161235401528181612527015281816130c2015281816131ec01528181613265015281816133ab015281816133e901528181613427015281816134650152818161378e0152818161388801526138bc0152600081816129c9015281816131190152818161409301528181614268015281816142f5015261435c0152614cdc6000f3fe6080604052600436106104a35760003560e01c80637db1342c11610260578063bfac5ee011610144578063e36c0202116100c1578063f1b36f6411610085578063f1b36f6414610eba578063f2fde38b14610ecf578063f4d3698614610eef578063f507de7714610f0f578063faf4b24b14610f25578063fe11f24014610f4557600080fd5b8063e36c020214610e29578063e429fcdf14610e3f578063e82bef2914610e64578063e84fb12d14610e84578063ee3b16c114610e9a57600080fd5b8063c6060d1d11610108578063c6060d1d14610d78578063c77c202114610d98578063cd8d263d14610dae578063ce4d9f1514610dce578063dd62ed3e14610de357600080fd5b8063bfac5ee014610cec578063bfc45d1514610d0c578063c4e6c60414610d22578063c52e9b8214610d42578063c5382ac514610d6257600080fd5b80639947fb33116101dd578063a9059cbb116101a1578063a9059cbb14610c36578063aa4bde2814610c56578063aa582b4214610c6c578063ad31eed814610c8c578063b2887bec14610cac578063b6a0735914610ccc57600080fd5b80639947fb3314610baa5780639bb8534414610bca578063a3ac33a714610be0578063a5696d8914610bf6578063a842486114610c1657600080fd5b80638f02bb5b116102245780638f02bb5b14610b1f5780638f83745f14610b3f578063917ceeb514610b5557806395d89b4114610b755780639714eb2914610b8a57600080fd5b80637db1342c14610a8157806385dc300414610aa15780638b67e4ea14610ac15780638da5cb5b14610ae15780638e0b017d14610aff57600080fd5b80634f0082ff1161038757806370a08231116103045780637355b15b116102c85780637355b15b146109b7578063756b4190146109d757806377ae5a26146109f75780637a37a0ed14610a175780637ae290f814610a415780637b02d25614610a6157600080fd5b806370a0823114610902578063715018a614610938578063719d5f831461094d57806372162cb61461096d57806372eb1eb6146109a157600080fd5b80636386c1c71161034b5780636386c1c71461085b57806363bcdfce146108965780636690864e146108ac5780636b3bd550146108cc5780636f436357146108ec57600080fd5b80634f0082ff146107bf578063553193ca146107df578063595dec3c146107f55780635e81c57c146108255780635ef019571461084557600080fd5b80631c75f085116104205780633c11100d116103e45780633c11100d146106df5780633df9a8d21461070f57806340aa81fe146107255780634188bf5a146107555780634308fa6a146107895780634e54cc5f1461079f57600080fd5b80631c75f085146106255780632171dcc91461065d57806323b872dd1461067d5780632c1f52161461069d578063313ce567146106bd57600080fd5b806306fdde031161046757806306fdde031461057a578063095ea7b31461059c57806314e3afa2146105bc57806318160ddd146105e05780631afc1a50146105f557600080fd5b8063017df7f2146104af57806301873d8f146104d157806301986fad1461051657806303da2b231461054657806304c23ffe1461056057600080fd5b366104aa57005b600080fd5b3480156104bb57600080fd5b506104cf6104ca36600461464a565b610f65565b005b3480156104dd57600080fd5b506105016104ec36600461464a565b601c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561052257600080fd5b5061050161053136600461464a565b60096020526000908152604090205460ff1681565b34801561055257600080fd5b50601f546105019060ff1681565b34801561056c57600080fd5b50601d546105019060ff1681565b34801561058657600080fd5b5061058f611386565b60405161050d919061468b565b3480156105a857600080fd5b506105016105b73660046146be565b611418565b3480156105c857600080fd5b506105d260295481565b60405190815260200161050d565b3480156105ec57600080fd5b50600c546105d2565b34801561060157600080fd5b5061050161061036600461464a565b600a6020526000908152604090205460ff1681565b34801561063157600080fd5b50600454610645906001600160a01b031681565b6040516001600160a01b03909116815260200161050d565b34801561066957600080fd5b506104cf6106783660046146fa565b61142f565b34801561068957600080fd5b5061050161069836600461472f565b611484565b3480156106a957600080fd5b50602354610645906001600160a01b031681565b3480156106c957600080fd5b5060085460405160ff909116815260200161050d565b3480156106eb57600080fd5b506105016106fa36600461464a565b600d6020526000908152604090205460ff1681565b34801561071b57600080fd5b506105d260305481565b34801561073157600080fd5b5061050161074036600461464a565b601e6020526000908152604090205460ff1681565b34801561076157600080fd5b506106457f000000000000000000000000000000000000000000000000000000000000000081565b34801561079557600080fd5b506105d260265481565b3480156107ab57600080fd5b506104cf6107ba36600461464a565b61151b565b3480156107cb57600080fd5b506104cf6107da366004614770565b6115b3565b3480156107eb57600080fd5b506105d260195481565b34801561080157600080fd5b5061050161081036600461464a565b600b6020526000908152604090205460ff1681565b34801561083157600080fd5b506104cf610840366004614789565b61164b565b34801561085157600080fd5b506105d260285481565b34801561086757600080fd5b5061087b61087636600461464a565b611688565b6040805193845260208401929092529082015260600161050d565b3480156108a257600080fd5b506105d260275481565b3480156108b857600080fd5b506104cf6108c736600461464a565b611746565b3480156108d857600080fd5b506104cf6108e736600461464a565b6117d2565b3480156108f857600080fd5b506105d2602a5481565b34801561090e57600080fd5b506105d261091d36600461464a565b6001600160a01b031660009081526001602052604090205490565b34801561094457600080fd5b506104cf61185e565b34801561095957600080fd5b50600554610645906001600160a01b031681565b34801561097957600080fd5b506106457f000000000000000000000000000000000000000000000000000000000000000081565b3480156109ad57600080fd5b506105d2602b5481565b3480156109c357600080fd5b506104cf6109d236600461485c565b6118d8565b3480156109e357600080fd5b506104cf6109f23660046148a1565b6119c4565b348015610a0357600080fd5b506104cf610a123660046148a1565b611a55565b348015610a2357600080fd5b50610a2c611b3c565b6040805192835260208301919091520161050d565b348015610a4d57600080fd5b50602254610645906001600160a01b031681565b348015610a6d57600080fd5b506104cf610a7c3660046148e6565b611c26565b348015610a8d57600080fd5b506104cf610a9c366004614770565b611c94565b348015610aad57600080fd5b506104cf610abc36600461464a565b611cc3565b348015610acd57600080fd5b506104cf610adc36600461464a565b611d4f565b348015610aed57600080fd5b506000546001600160a01b0316610645565b348015610b0b57600080fd5b506104cf610b1a366004614770565b611da1565b348015610b2b57600080fd5b506104cf610b3a366004614770565b611dd0565b348015610b4b57600080fd5b506105d260135481565b348015610b6157600080fd5b506104cf610b70366004614770565b611dff565b348015610b8157600080fd5b5061058f611e7a565b348015610b9657600080fd5b506104cf610ba53660046148a1565b611e89565b348015610bb657600080fd5b506105d2610bc5366004614770565b611f1a565b348015610bd657600080fd5b506105d2601a5481565b348015610bec57600080fd5b506105d2602e5481565b348015610c0257600080fd5b506104cf610c113660046146be565b611fc0565b348015610c2257600080fd5b506104cf610c313660046146fa565b612062565b348015610c4257600080fd5b50610501610c513660046146be565b6120b7565b348015610c6257600080fd5b506105d260205481565b348015610c7857600080fd5b506104cf610c87366004614916565b6120c4565b348015610c9857600080fd5b50602454610645906001600160a01b031681565b348015610cb857600080fd5b506104cf610cc73660046148a1565b612244565b348015610cd857600080fd5b506104cf610ce7366004614770565b6122d5565b348015610cf857600080fd5b506104cf610d0736600461498b565b612304565b348015610d1857600080fd5b506105d2602d5481565b348015610d2e57600080fd5b50602f54610645906001600160a01b031681565b348015610d4e57600080fd5b506104cf610d5d366004614789565b6123d6565b348015610d6e57600080fd5b506105d260215481565b348015610d8457600080fd5b506104cf610d93366004614770565b612413565b348015610da457600080fd5b506105d260255481565b348015610dba57600080fd5b506104cf610dc9366004614770565b6124a6565b348015610dda57600080fd5b5061087b6124d5565b348015610def57600080fd5b506105d2610dfe3660046149cd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610e3557600080fd5b506105d2602c5481565b348015610e4b57600080fd5b50601d546106459061010090046001600160a01b031681565b348015610e7057600080fd5b50600354610645906001600160a01b031681565b348015610e9057600080fd5b506105d260315481565b348015610ea657600080fd5b506104cf610eb5366004614789565b61259b565b348015610ec657600080fd5b506105d26125db565b348015610edb57600080fd5b506104cf610eea36600461464a565b6125f8565b348015610efb57600080fd5b506104cf610f0a36600461464a565b6126c1565b348015610f1b57600080fd5b506105d260185481565b348015610f3157600080fd5b506104cf610f403660046149fb565b612749565b348015610f5157600080fd5b506104cf610f60366004614770565b61281d565b6000546001600160a01b03163314610f985760405162461bcd60e51b8152600401610f8f90614a36565b60405180910390fd5b602380546001600160a01b0319166001600160a01b038381169182179092556040516395c5c5e360e01b81527f00000000000000000000000000000000000000000000000000000000000000009092166004830152306024830152906395c5c5e390604401600060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b815260006004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b15801561107c57600080fd5b505af1158015611090573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b815261dead6004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b8152306004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b15801561114657600080fd5b505af115801561115a573d6000803e3d6000fd5b5050602354602254604051630a0d72b360e11b81526001600160a01b039182166004820152600160248201529116925063141ae5669150604401600060405180830381600087803b1580156111ae57600080fd5b505af11580156111c2573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260016024830152909116925063141ae5669150604401600060405180830381600087803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050602354600354604051635160f2f360e11b81526001600160a01b0391821660048201529116925063a2c1e5e69150602401600060405180830381600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505060235460048054604051635160f2f360e11b81526001600160a01b0391821692810192909252909116925063a2c1e5e69150602401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b5050602354604051635160f2f360e11b81523360048201526001600160a01b03909116925063a2c1e5e69150602401600060405180830381600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b50506023546001600160a01b03166000525050601e60205250565b60606006805461139590614a52565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190614a52565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b5050505050905090565b6000611425338484612870565b5060015b92915050565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60006114918484846128d2565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611511576001600160a01b03841660009081526002602090815260408083203384529091529020546114ec908390614a9c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610f8f90614a36565b602480546001600160a01b0319166001600160a01b0383169081178255604051630186b0f360e71b8152306004820152909163c35879809101600060405180830381600087803b15801561159857600080fd5b505af11580156115ac573d6000803e3d6000fd5b5050505050565b336000908152600a602052604090205460ff166115cf57600080fd5b601d5461010090046001600160a01b031660009081526001602052604081205490506000612710602654846116049190614aaf565b61160e9190614ac6565b90508181111561161b5750805b801561163d57601d5461163d9061010090046001600160a01b03163083613010565b61164681613058565b505050565b6000546001600160a01b031633146116755760405162461bcd60e51b8152600401610f8f90614a36565b601d805460ff1916911515919091179055565b6040516370a0823160e01b81526001600160a01b038281166004830152600091829182917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190614ae8565b6001600160a01b039094166000908152601b6020526040902080546001909101549095909350915050565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610f8f90614a36565b600480546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff191660011790556117b4600a600019614ac6565b6004546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610f8f90614a36565b600580546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff19166001179055611840600a600019614ac6565b6005546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b031633146118885760405162461bcd60e51b8152600401610f8f90614a36565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146119025760405162461bcd60e51b8152600401610f8f90614a36565b8151600080805b838110156119bc5785818151811061192357611923614b01565b6020908102919091018101516001600160a01b038082166000818152601b909452604093849020898155600181018a90556023549451635160f2f360e11b81526004810192909252929650919450919091169063a2c1e5e690602401600060405180830381600087803b15801561199957600080fd5b505af11580156119ad573d6000803e3d6000fd5b50505050806001019050611909565b505050505050565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781600b6000858481518110611a1157611a11614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611a4d81614b17565b9150506119f1565b6000546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781600a6000858481518110611aa257611aa2614b01565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508160096000858481518110611af857611af8614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b3481614b17565b915050611a82565b60008060007f00000000000000000000000000000000000000000000000000000000000000009050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc99190614b47565b506001600160701b0391821693501690507f0000000000000000000000000000000000000000000000000000000000000000306001600160a01b0382161015611c1757829550819450611c1e565b8195508294505b505050509091565b33611c396000546001600160a01b031690565b6001600160a01b03161480611c5857506005546001600160a01b031633145b611c745760405162461bcd60e51b8152600401610f8f90614b8c565b601d54611c909061010090046001600160a01b03168284613010565b5050565b6000546001600160a01b03163314611cbe5760405162461bcd60e51b8152600401610f8f90614a36565b602055565b6000546001600160a01b03163314611ced5760405162461bcd60e51b8152600401610f8f90614a36565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff19166001179055611d31600a600019614ac6565b6003546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610f8f90614a36565b601d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b8152600401610f8f90614a36565b602655565b6000546001600160a01b03163314611dfa5760405162461bcd60e51b8152600401610f8f90614a36565b603055565b6000546001600160a01b03163314611e295760405162461bcd60e51b8152600401610f8f90614a36565b62030d408110158015611e3f5750621e84808111155b611e755760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610f8f565b603155565b60606007805461139590614a52565b6000546001600160a01b03163314611eb35760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781601e6000858481518110611ed657611ed6614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611f1281614b17565b915050611eb6565b6000611f246125db565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fac9190614ae8565b611fb69084614aaf565b6114299190614ac6565b6000546001600160a01b03163314611fea5760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b038281166000818152601b6020526040908190208481556023549151635160f2f360e11b8152600481019390935292169063a2c1e5e690602401600060405180830381600087803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461208c5760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b60006114253384846128d2565b6000546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610f8f90614a36565b8181600081811061210157612101614b01565b6020029190910135601055508181600181811061212057612120614b01565b6020029190910135600f55508181600281811061213f5761213f614b01565b6020029190910135601155508181600381811061215e5761215e614b01565b6020029190910135601255508181600481811061217d5761217d614b01565b6020029190910135601555508181600581811061219c5761219c614b01565b602002919091013560145550818160068181106121bb576121bb614b01565b602002919091013560165550818160078181106121da576121da614b01565b602002919091013560175550601254601154600f546010546121fc9190614be9565b6122069190614be9565b6122109190614be9565b6013556017546016546014546015546122299190614be9565b6122339190614be9565b61223d9190614be9565b6018555050565b6000546001600160a01b0316331461226e5760405162461bcd60e51b8152600401610f8f90614a36565b60005b825181101561164657816009600085848151811061229157612291614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122cd81614b17565b915050612271565b6000546001600160a01b031633146122ff5760405162461bcd60e51b8152600401610f8f90614a36565b602955565b336123176000546001600160a01b031690565b6001600160a01b0316148061233657506005546001600160a01b031633145b6123525760405162461bcd60e51b8152600401610f8f90614b8c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036123c15760405162461bcd60e51b815260206004820152600b60248201526a3a37b5b2b71032b93937b960a91b6044820152606401610f8f565b6123cc83828461357e565b6116468147613630565b6000546001600160a01b031633146124005760405162461bcd60e51b8152600401610f8f90614a36565b601f805460ff1916911515919091179055565b336124266000546001600160a01b031690565b6001600160a01b0316148061244557506005546001600160a01b031633145b6124615760405162461bcd60e51b8152600401610f8f90614b8c565b600081116124a15760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081d1bdd185b609a1b6044820152606401610f8f565b602555565b6000546001600160a01b031633146124d05760405162461bcd60e51b8152600401610f8f90614a36565b602855565b60008060006124e2611b3c565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529295509093507f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125949190614ae8565b9050909192565b6000546001600160a01b031633146125c55760405162461bcd60e51b8152600401610f8f90614a36565b80156125d2574360195550565b60006019555b50565b6000602554670de0b6b3a76400006125f39190614aaf565b905090565b6000546001600160a01b031633146126225760405162461bcd60e51b8152600401610f8f90614a36565b61deac196001600160a01b038216016126665760405162461bcd60e51b81526020600482015260066024820152656e307864656160d01b6044820152606401610f8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336126d46000546001600160a01b031690565b6001600160a01b031614806126f357506005546001600160a01b031633145b61270f5760405162461bcd60e51b8152600401610f8f90614b8c565b602f80546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b3361275c6000546001600160a01b031690565b6001600160a01b0316148061277b57506005546001600160a01b031633145b6127975760405162461bcd60e51b8152600401610f8f90614b8c565b6127108183856127a7888a614be9565b6127b19190614be9565b6127bb9190614be9565b6127c59190614be9565b11156128065760405162461bcd60e51b815260206004820152601060248201526f3a37ba30b6103930ba329032b93937b960811b6044820152606401610f8f565b602a94909455602b92909255602c55602d55602e55565b336128306000546001600160a01b031690565b6001600160a01b0316148061284f57506005546001600160a01b031633145b61286b5760405162461bcd60e51b8152600401610f8f90614b8c565b602755565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152600b602052604090205460ff16156129275760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b6044820152606401610f8f565b6001600160a01b038316600090815260016020526040902054818110156129765760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401610f8f565b6001600160a01b03841660009081526009602052604081205460ff161580156129b857506001600160a01b03841660009081526009602052604090205460ff16155b156129fa57846001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146129fa575060015b326001600160a01b03861681148015612a1b5750336001600160a01b038716145b8015612a2f57506001600160a01b03851630145b15612a3e576119bc86856136e8565b856001600160a01b0316816001600160a01b0316148015612a675750336001600160a01b038716145b8015612a7a57506001600160a01b038516155b8015612a9f57506001600160a01b03861660009081526009602052604090205460ff16155b15612b1d57612ab086600086613010565b6024805460405163020d3fc360e11b81526001600160a01b03848116600483015292810187905291169063041a7f8690604401600060405180830381600087803b158015612afd57600080fd5b505af1158015612b11573d6000803e3d6000fd5b50505050505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316148015612b705750336000908152601c602052604090205460ff165b8015612b8d5750876001600160a01b0316836001600160a01b0316145b15612bf857612b9b866138fe565b90508015612bf8576001600160a01b0383166000908152601b60205260408120805490935082918491612bcf908490614be9565b9091555050601954600003612bf85780826001016000828254612bf29190614be9565b90915550505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316896001600160a01b031603612cbc57612c3c87613977565b90508015612cbc576001600160a01b0384166000908152601b6020526040902054811115612c6957600080fd5b6001600160a01b0384166000908152601b602052604081208054839290612c91908490614a9c565b90915550506001600160a01b03841660009081526009602052604090205460ff1615612cbc57600094505b6001600160a01b0389166000908152600d602052604090205460ff1680612cfb57506001600160a01b0388166000908152600d602052604090205460ff165b15612e2057601a54600003612d6d576001600160a01b03891660009081526009602052604090205460ff168015612d6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b0316145b15612d6d5743601a555b6001600160a01b03891660009081526009602052604090205460ff16158015612daf57506001600160a01b03881660009081526009602052604090205460ff16155b15612e2057601954600003612dde57601a546000108015612dd05750600082115b612dd957600080fd5b612e20565b81158015612dea575080155b8015612e0357506003601954612e009190614be9565b43105b15612e2057612e158989896063613ad9565b505050505050505050565b612e2e898989888686613b63565b6001600160a01b0389163014612e15578115612ea457602354604051635160f2f360e11b81526001600160a01b0386811660048301529091169063a2c1e5e690602401600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050505b603154602154600003612f5d576023546001600160a01b031663ffb2c4796064612ece8482614aaf565b612ed89190614ac6565b6040518263ffffffff1660e01b8152600401612ef691815260200190565b600060405180830381600087803b158015612f1057600080fd5b505af1925050508015612f21575060015b612f53576040517fefee91e1de77e029c77d49a8e4ed916ea4a401e24bf8f429b1a9d432f31599ec90600090a1612b11565b6001602155612b11565b6024546001600160a01b031663ffb2c4796064612f7a8482614aaf565b612f849190614ac6565b6040518263ffffffff1660e01b8152600401612fa291815260200190565b600060405180830381600087803b158015612fbc57600080fd5b505af1925050508015612fcd575060015b612fff576040517fa2f8809c88625d840ec343cff35dc7fc6a0a88f1c1b642ec595791ca2cba279f90600090a1612b11565b600060215550505050505050505050565b6001600160a01b038316600090815260016020526040902054613034908290614a9c565b6001600160a01b038416600090815260016020526040902055611646838383613ee2565b600e805460ff1916600117905580156135715760408051600280825260608201835260009260208301908036833701905050905030816000815181106130a0576130a0614b01565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106130f4576130f4614b01565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f000000000000000000000000000000000000000000000000000000000000000090911690635c11d7959061317990859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401614bfc565b600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600093507f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132589190614ae8565b905080156132ac576132ac7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003084613f5a565b6000602e54602d54602c54602b54602a546132c79190614be9565b6132d19190614be9565b6132db9190614be9565b6132e59190614be9565b9050600080600080600080871180156132fe5750600086115b156134945785602a54886133129190614aaf565b61331c9190614ac6565b945085602b548861332d9190614aaf565b6133379190614ac6565b935085602d54886133489190614aaf565b6133529190614ac6565b915085602e54886133639190614aaf565b61336d9190614ac6565b905080828561337c888b614a9c565b6133869190614a9c565b6133909190614a9c565b61339a9190614a9c565b925084156133da576023546133da907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168761357e565b831561341857600354613418907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168661357e565b811561345657602454613456907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168461357e565b801561349457602f54613494907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168361357e565b8815613568576134f47f0000000000000000000000000000000000000000000000000000000000000000601d60019054906101000a90046001600160a01b03166127106027548d6134e59190614aaf565b6134ef9190614ac6565b613010565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561354f57600080fd5b505af1158015613563573d6000803e3d6000fd5b505050505b50505050505050505b50600e805460ff19169055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916135da9190614c6d565b6000604051808303816000865af19150503d8060008114613617576040519150601f19603f3d011682016040523d82523d6000602084013e61361c565b606091505b50915091508180156119bc57505050505050565b6001600160a01b038216600003613645575050565b604080516000808252602082019092526001600160a01b03841690839060405161366f9190614c6d565b60006040518083038185875af1925050503d80600081146136ac576040519150601f19603f3d011682016040523d82523d6000602084013e6136b1565b606091505b50509050806116465760405162461bcd60e51b815260206004820152600360248201526222aa2360e91b6044820152606401610f8f565b6000601954116137275760405162461bcd60e51b815260206004820152600a6024820152690dcdee84098c2eadcc6d60b31b6044820152606401610f8f565b613732823083613010565b600061373d82611f1a565b9050600081116137775760405162461bcd60e51b815260206004820152600560248201526406f757420360dc1b6044820152606401610f8f565b6040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138019190614ae8565b10156138415760405162461bcd60e51b815260206004820152600f60248201526e0eae6c8e840dcdee840cadcdeeaced608b1b6044820152606401610f8f565b6001600160a01b03831660009081526009602052604081205460ff166138b757612710826018546138729190614aaf565b61387c9190614ac6565b6003549091506138b7907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03168361357e565b6138eb7f0000000000000000000000000000000000000000000000000000000000000000856138e68486614a9c565b61357e565b6138f83061dead85613010565b50505050565b60008060008061390c6124d5565b925092509250600080841180156139235750600083115b1561394057826139338588614aaf565b61393d9190614ac6565b90505b60008211801561395957506139558185614be9565b8210155b1561396e5761396a82878686614006565b5094505b50505050919050565b6000806000806139856124d5565b92509250925082811015613a7a57846139d37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660009081526001602052604090205490565b6139dd9190614a9c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f9190614ae8565b613a699087614aaf565b613a739190614ac6565b9350613ad1565b601d5460ff1615613ad15760008084118015613a965750600083115b1561396e57613aa58684614a9c565b613aaf8588614aaf565b613ab99190614ac6565b9050613ac58482614be9565b82101561396e57600080fd5b505050919050565b6001600160a01b038416600090815260016020526040902054613afd908390614a9c565b6001600160a01b0385166000908152600160205260408120919091556064613b258385614aaf565b613b2f9190614ac6565b90508015613b4f57600454613b4f9086906001600160a01b031683613ee2565b6115ac8585613b5e8487614a9c565b613ee2565b6001600160a01b038616600090815260016020526040902054613b87908590614a9c565b6001600160a01b0387166000908152600160205260408120919091558315613dad576000806000808611613cb4578415613bd757613bc68a8987614484565b613bd09085614be9565b9350613cb4565b6001600160a01b0389166000908152600d602052604090205460ff1615613c47576001925061271060185489613c0d9190614aaf565b613c179190614ac6565b915061271060165489613c2a9190614aaf565b613c349190614ac6565b9050613c408183614a9c565b9150613cb4565b6001600160a01b038a166000908152600d602052604090205460ff1615613c965761271060135489613c799190614aaf565b613c839190614ac6565b915061271060115489613c2a9190614aaf565b61271060305489613ca79190614aaf565b613cb19190614ac6565b91505b8015613cd357613cc48185614be9565b9350613cd38a61dead83613ee2565b8115613cfe57613ce38285614be9565b600454909450613cfe908b906001600160a01b031684613ee2565b6001600160a01b0389166000908152601e602052604090205460ff16158015613d295750601f5460ff165b15613da957602080546001600160a01b038b16600090815260019092526040909120548590613d59908b90614be9565b613d639190614a9c565b1115613da95760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401610f8f565b5050505b6001600160a01b0387166000908152600d602052604090205460ff168015613dee57506001600160a01b0386166000908152600a602052604090205460ff16155b15613e40576001600160a01b0386167fccb699991f181b9bc36d047361c8d3e53a29fd847a3aba6dfac843ce7ddbd689613e288388614a9c565b60408051918252600160208301520160405180910390a25b6001600160a01b0386166000908152600d602052604090205460ff168015613e8157506001600160a01b0387166000908152600a602052604090205460ff16155b15613ed3576001600160a01b0386167fccb699991f181b9bc36d047361c8d3e53a29fd847a3aba6dfac843ce7ddbd689613ebb8388614a9c565b60408051918252600260208301520160405180910390a25b6120598787613b5e8489614a9c565b6001600160a01b038216600090815260016020526040902054613f06908290614be9565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128c59085815260200190565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092871691613fba91614c6d565b6000604051808303816000865af19150503d8060008114613ff7576040519150601f19603f3d011682016040523d82523d6000602084013e613ffc565b606091505b5050505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d9190614ae8565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141139190614c89565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141749190614c89565b90506000806001600160a01b0316826001600160a01b03161415905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142149190614ae8565b9050811561440a57801561440a576000614236614231898b614aaf565b6145a2565b90506000614243836145a2565b905080821115614407576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016142dd5761429f8385614a9c565b6142a99089614aaf565b6142b4906008614aaf565b91506142c1836008614aaf565b6142cc856011614aaf565b6142d69190614be9565b90506143e5565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016143445761432c8385614a9c565b6143369089614aaf565b9150826142cc856003614aaf565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316016143b6576143938385614a9c565b61439d9089614aaf565b6143a8906003614aaf565b9150826142cc856005614aaf565b6143c08385614a9c565b6143ca9089614aaf565b9150826143d8856005614aaf565b6143e29190614be9565b90505b6143ef8183614ac6565b98508815614404576144018989614be9565b97505b50505b50505b6000614416898c614a9c565b905084600003614441576103e86144306142318c84614aaf565b61443a9190614a9c565b9650614476565b6144738961444f8784614aaf565b6144599190614ac6565b89614464888e614aaf565b61446e9190614ac6565b614612565b96505b505050505094509492505050565b326000908152601b60205260408120600181015481548391906144a8908690614be9565b6144b29190614a9c565b90508380828111156144c15750815b60008115614527576144d38284614a9c565b925061271060285488848b6144e89190614aaf565b6144f29190614ac6565b6144fc9190614aaf565b6145069190614ac6565b90506145128187614be9565b95508015614527576145278961dead83613ee2565b600061271060295489868c61453c9190614aaf565b6145469190614ac6565b6145509190614aaf565b61455a9190614ac6565b9050801561457b5761456c8188614be9565b965061457b8a61dead83613ee2565b8386600101600082825461458f9190614a9c565b90915550969a9950505050505050505050565b6000600382111561460357508060006145bc600283614ac6565b6145c7906001614be9565b90505b818110156145fd579050806002816145e28186614ac6565b6145ec9190614be9565b6145f69190614ac6565b90506145ca565b50919050565b811561460d575060015b919050565b60008183106146215781614623565b825b9392505050565b6001600160a01b03811681146125d857600080fd5b803561460d8161462a565b60006020828403121561465c57600080fd5b81356146238161462a565b60005b8381101561468257818101518382015260200161466a565b50506000910152565b60208152600082518060208401526146aa816040850160208701614667565b601f01601f19169190910160400192915050565b600080604083850312156146d157600080fd5b82356146dc8161462a565b946020939093013593505050565b8035801515811461460d57600080fd5b6000806040838503121561470d57600080fd5b82356147188161462a565b9150614726602084016146ea565b90509250929050565b60008060006060848603121561474457600080fd5b833561474f8161462a565b9250602084013561475f8161462a565b929592945050506040919091013590565b60006020828403121561478257600080fd5b5035919050565b60006020828403121561479b57600080fd5b614623826146ea565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126147cb57600080fd5b8135602067ffffffffffffffff808311156147e8576147e86147a4565b8260051b604051601f19603f8301168101818110848211171561480d5761480d6147a4565b60405293845285810183019383810192508785111561482b57600080fd5b83870191505b84821015614851576148428261463f565b83529183019190830190614831565b979650505050505050565b6000806040838503121561486f57600080fd5b823567ffffffffffffffff81111561488657600080fd5b614892858286016147ba565b95602094909401359450505050565b600080604083850312156148b457600080fd5b823567ffffffffffffffff8111156148cb57600080fd5b6148d7858286016147ba565b925050614726602084016146ea565b600080604083850312156148f957600080fd5b82359150602083013561490b8161462a565b809150509250929050565b6000806020838503121561492957600080fd5b823567ffffffffffffffff8082111561494157600080fd5b818501915085601f83011261495557600080fd5b81358181111561496457600080fd5b8660208260051b850101111561497957600080fd5b60209290920196919550909350505050565b6000806000606084860312156149a057600080fd5b83356149ab8161462a565b92506020840135915060408401356149c28161462a565b809150509250925092565b600080604083850312156149e057600080fd5b82356149eb8161462a565b9150602083013561490b8161462a565b600080600080600060a08688031215614a1357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825260029082015261216f60f01b604082015260600190565b600181811c90821680614a6657607f821691505b6020821081036145fd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561142957611429614a86565b808202811582820484141761142957611429614a86565b600082614ae357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614afa57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201614b2957614b29614a86565b5060010190565b80516001600160701b038116811461460d57600080fd5b600080600060608486031215614b5c57600080fd5b614b6584614b30565b9250614b7360208501614b30565b9150604084015163ffffffff811681146149c257600080fd5b60208082526037908201527f4f6e6c79206f776e6572206f72206d61696e74656e616e63652077616c6c657460408201527f2063616e2063616c6c20746869732066756e6374696f6e000000000000000000606082015260800190565b8082018082111561142957611429614a86565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c4c5784516001600160a01b031683529383019391830191600101614c27565b50506001600160a01b03969096166060850152505050608001529392505050565b60008251614c7f818460208701614667565b9190910192915050565b600060208284031215614c9b57600080fd5b81516146238161462a56fea2646970667358221220e2fda9742c05c74dbb6f53f9a0965ed54cd107dd7c0b7aa865307bb10f607f8764736f6c63430008130033608060405234801561001057600080fd5b5060405161014738038061014783398101604081905261002f916100a8565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b3906044016020604051808303816000875af115801561007d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100a191906100d8565b50506100fa565b6000602082840312156100ba57600080fd5b81516001600160a01b03811681146100d157600080fd5b9392505050565b6000602082840312156100ea57600080fd5b815180151581146100d157600080fd5b603f806101086000396000f3fe6080604052600080fdfea2646970667358221220b72f217bdcb12a2dfe7b5553ab4882ad4ff67342a21b3cce5a9146162f1eb0ab64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106104a35760003560e01c80637db1342c11610260578063bfac5ee011610144578063e36c0202116100c1578063f1b36f6411610085578063f1b36f6414610eba578063f2fde38b14610ecf578063f4d3698614610eef578063f507de7714610f0f578063faf4b24b14610f25578063fe11f24014610f4557600080fd5b8063e36c020214610e29578063e429fcdf14610e3f578063e82bef2914610e64578063e84fb12d14610e84578063ee3b16c114610e9a57600080fd5b8063c6060d1d11610108578063c6060d1d14610d78578063c77c202114610d98578063cd8d263d14610dae578063ce4d9f1514610dce578063dd62ed3e14610de357600080fd5b8063bfac5ee014610cec578063bfc45d1514610d0c578063c4e6c60414610d22578063c52e9b8214610d42578063c5382ac514610d6257600080fd5b80639947fb33116101dd578063a9059cbb116101a1578063a9059cbb14610c36578063aa4bde2814610c56578063aa582b4214610c6c578063ad31eed814610c8c578063b2887bec14610cac578063b6a0735914610ccc57600080fd5b80639947fb3314610baa5780639bb8534414610bca578063a3ac33a714610be0578063a5696d8914610bf6578063a842486114610c1657600080fd5b80638f02bb5b116102245780638f02bb5b14610b1f5780638f83745f14610b3f578063917ceeb514610b5557806395d89b4114610b755780639714eb2914610b8a57600080fd5b80637db1342c14610a8157806385dc300414610aa15780638b67e4ea14610ac15780638da5cb5b14610ae15780638e0b017d14610aff57600080fd5b80634f0082ff1161038757806370a08231116103045780637355b15b116102c85780637355b15b146109b7578063756b4190146109d757806377ae5a26146109f75780637a37a0ed14610a175780637ae290f814610a415780637b02d25614610a6157600080fd5b806370a0823114610902578063715018a614610938578063719d5f831461094d57806372162cb61461096d57806372eb1eb6146109a157600080fd5b80636386c1c71161034b5780636386c1c71461085b57806363bcdfce146108965780636690864e146108ac5780636b3bd550146108cc5780636f436357146108ec57600080fd5b80634f0082ff146107bf578063553193ca146107df578063595dec3c146107f55780635e81c57c146108255780635ef019571461084557600080fd5b80631c75f085116104205780633c11100d116103e45780633c11100d146106df5780633df9a8d21461070f57806340aa81fe146107255780634188bf5a146107555780634308fa6a146107895780634e54cc5f1461079f57600080fd5b80631c75f085146106255780632171dcc91461065d57806323b872dd1461067d5780632c1f52161461069d578063313ce567146106bd57600080fd5b806306fdde031161046757806306fdde031461057a578063095ea7b31461059c57806314e3afa2146105bc57806318160ddd146105e05780631afc1a50146105f557600080fd5b8063017df7f2146104af57806301873d8f146104d157806301986fad1461051657806303da2b231461054657806304c23ffe1461056057600080fd5b366104aa57005b600080fd5b3480156104bb57600080fd5b506104cf6104ca36600461464a565b610f65565b005b3480156104dd57600080fd5b506105016104ec36600461464a565b601c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561052257600080fd5b5061050161053136600461464a565b60096020526000908152604090205460ff1681565b34801561055257600080fd5b50601f546105019060ff1681565b34801561056c57600080fd5b50601d546105019060ff1681565b34801561058657600080fd5b5061058f611386565b60405161050d919061468b565b3480156105a857600080fd5b506105016105b73660046146be565b611418565b3480156105c857600080fd5b506105d260295481565b60405190815260200161050d565b3480156105ec57600080fd5b50600c546105d2565b34801561060157600080fd5b5061050161061036600461464a565b600a6020526000908152604090205460ff1681565b34801561063157600080fd5b50600454610645906001600160a01b031681565b6040516001600160a01b03909116815260200161050d565b34801561066957600080fd5b506104cf6106783660046146fa565b61142f565b34801561068957600080fd5b5061050161069836600461472f565b611484565b3480156106a957600080fd5b50602354610645906001600160a01b031681565b3480156106c957600080fd5b5060085460405160ff909116815260200161050d565b3480156106eb57600080fd5b506105016106fa36600461464a565b600d6020526000908152604090205460ff1681565b34801561071b57600080fd5b506105d260305481565b34801561073157600080fd5b5061050161074036600461464a565b601e6020526000908152604090205460ff1681565b34801561076157600080fd5b506106457f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c81565b34801561079557600080fd5b506105d260265481565b3480156107ab57600080fd5b506104cf6107ba36600461464a565b61151b565b3480156107cb57600080fd5b506104cf6107da366004614770565b6115b3565b3480156107eb57600080fd5b506105d260195481565b34801561080157600080fd5b5061050161081036600461464a565b600b6020526000908152604090205460ff1681565b34801561083157600080fd5b506104cf610840366004614789565b61164b565b34801561085157600080fd5b506105d260285481565b34801561086757600080fd5b5061087b61087636600461464a565b611688565b6040805193845260208401929092529082015260600161050d565b3480156108a257600080fd5b506105d260275481565b3480156108b857600080fd5b506104cf6108c736600461464a565b611746565b3480156108d857600080fd5b506104cf6108e736600461464a565b6117d2565b3480156108f857600080fd5b506105d2602a5481565b34801561090e57600080fd5b506105d261091d36600461464a565b6001600160a01b031660009081526001602052604090205490565b34801561094457600080fd5b506104cf61185e565b34801561095957600080fd5b50600554610645906001600160a01b031681565b34801561097957600080fd5b506106457f00000000000000000000000072e714ba1e65d8825e5c3831d37a21cc9964605481565b3480156109ad57600080fd5b506105d2602b5481565b3480156109c357600080fd5b506104cf6109d236600461485c565b6118d8565b3480156109e357600080fd5b506104cf6109f23660046148a1565b6119c4565b348015610a0357600080fd5b506104cf610a123660046148a1565b611a55565b348015610a2357600080fd5b50610a2c611b3c565b6040805192835260208301919091520161050d565b348015610a4d57600080fd5b50602254610645906001600160a01b031681565b348015610a6d57600080fd5b506104cf610a7c3660046148e6565b611c26565b348015610a8d57600080fd5b506104cf610a9c366004614770565b611c94565b348015610aad57600080fd5b506104cf610abc36600461464a565b611cc3565b348015610acd57600080fd5b506104cf610adc36600461464a565b611d4f565b348015610aed57600080fd5b506000546001600160a01b0316610645565b348015610b0b57600080fd5b506104cf610b1a366004614770565b611da1565b348015610b2b57600080fd5b506104cf610b3a366004614770565b611dd0565b348015610b4b57600080fd5b506105d260135481565b348015610b6157600080fd5b506104cf610b70366004614770565b611dff565b348015610b8157600080fd5b5061058f611e7a565b348015610b9657600080fd5b506104cf610ba53660046148a1565b611e89565b348015610bb657600080fd5b506105d2610bc5366004614770565b611f1a565b348015610bd657600080fd5b506105d2601a5481565b348015610bec57600080fd5b506105d2602e5481565b348015610c0257600080fd5b506104cf610c113660046146be565b611fc0565b348015610c2257600080fd5b506104cf610c313660046146fa565b612062565b348015610c4257600080fd5b50610501610c513660046146be565b6120b7565b348015610c6257600080fd5b506105d260205481565b348015610c7857600080fd5b506104cf610c87366004614916565b6120c4565b348015610c9857600080fd5b50602454610645906001600160a01b031681565b348015610cb857600080fd5b506104cf610cc73660046148a1565b612244565b348015610cd857600080fd5b506104cf610ce7366004614770565b6122d5565b348015610cf857600080fd5b506104cf610d0736600461498b565b612304565b348015610d1857600080fd5b506105d2602d5481565b348015610d2e57600080fd5b50602f54610645906001600160a01b031681565b348015610d4e57600080fd5b506104cf610d5d366004614789565b6123d6565b348015610d6e57600080fd5b506105d260215481565b348015610d8457600080fd5b506104cf610d93366004614770565b612413565b348015610da457600080fd5b506105d260255481565b348015610dba57600080fd5b506104cf610dc9366004614770565b6124a6565b348015610dda57600080fd5b5061087b6124d5565b348015610def57600080fd5b506105d2610dfe3660046149cd565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610e3557600080fd5b506105d2602c5481565b348015610e4b57600080fd5b50601d546106459061010090046001600160a01b031681565b348015610e7057600080fd5b50600354610645906001600160a01b031681565b348015610e9057600080fd5b506105d260315481565b348015610ea657600080fd5b506104cf610eb5366004614789565b61259b565b348015610ec657600080fd5b506105d26125db565b348015610edb57600080fd5b506104cf610eea36600461464a565b6125f8565b348015610efb57600080fd5b506104cf610f0a36600461464a565b6126c1565b348015610f1b57600080fd5b506105d260185481565b348015610f3157600080fd5b506104cf610f403660046149fb565b612749565b348015610f5157600080fd5b506104cf610f60366004614770565b61281d565b6000546001600160a01b03163314610f985760405162461bcd60e51b8152600401610f8f90614a36565b60405180910390fd5b602380546001600160a01b0319166001600160a01b038381169182179092556040516395c5c5e360e01b81527f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c9092166004830152306024830152906395c5c5e390604401600060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b815260006004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b15801561107c57600080fd5b505af1158015611090573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b815261dead6004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b1580156110e257600080fd5b505af11580156110f6573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b8152306004820152600160248201526001600160a01b03909116925063141ae5669150604401600060405180830381600087803b15801561114657600080fd5b505af115801561115a573d6000803e3d6000fd5b5050602354602254604051630a0d72b360e11b81526001600160a01b039182166004820152600160248201529116925063141ae5669150604401600060405180830381600087803b1580156111ae57600080fd5b505af11580156111c2573d6000803e3d6000fd5b5050602354604051630a0d72b360e11b81526001600160a01b037f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c8116600483015260016024830152909116925063141ae5669150604401600060405180830381600087803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050602354600354604051635160f2f360e11b81526001600160a01b0391821660048201529116925063a2c1e5e69150602401600060405180830381600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b505060235460048054604051635160f2f360e11b81526001600160a01b0391821692810192909252909116925063a2c1e5e69150602401600060405180830381600087803b1580156112fa57600080fd5b505af115801561130e573d6000803e3d6000fd5b5050602354604051635160f2f360e11b81523360048201526001600160a01b03909116925063a2c1e5e69150602401600060405180830381600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b50506023546001600160a01b03166000525050601e60205250565b60606006805461139590614a52565b80601f01602080910402602001604051908101604052809291908181526020018280546113c190614a52565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b5050505050905090565b6000611425338484612870565b5060015b92915050565b6000546001600160a01b031633146114595760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b60006114918484846128d2565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611511576001600160a01b03841660009081526002602090815260408083203384529091529020546114ec908390614a9c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610f8f90614a36565b602480546001600160a01b0319166001600160a01b0383169081178255604051630186b0f360e71b8152306004820152909163c35879809101600060405180830381600087803b15801561159857600080fd5b505af11580156115ac573d6000803e3d6000fd5b5050505050565b336000908152600a602052604090205460ff166115cf57600080fd5b601d5461010090046001600160a01b031660009081526001602052604081205490506000612710602654846116049190614aaf565b61160e9190614ac6565b90508181111561161b5750805b801561163d57601d5461163d9061010090046001600160a01b03163083613010565b61164681613058565b505050565b6000546001600160a01b031633146116755760405162461bcd60e51b8152600401610f8f90614a36565b601d805460ff1916911515919091179055565b6040516370a0823160e01b81526001600160a01b038281166004830152600091829182917f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c909116906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190614ae8565b6001600160a01b039094166000908152601b6020526040902080546001909101549095909350915050565b6000546001600160a01b031633146117705760405162461bcd60e51b8152600401610f8f90614a36565b600480546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff191660011790556117b4600a600019614ac6565b6004546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b031633146117fc5760405162461bcd60e51b8152600401610f8f90614a36565b600580546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff19166001179055611840600a600019614ac6565b6005546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b031633146118885760405162461bcd60e51b8152600401610f8f90614a36565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146119025760405162461bcd60e51b8152600401610f8f90614a36565b8151600080805b838110156119bc5785818151811061192357611923614b01565b6020908102919091018101516001600160a01b038082166000818152601b909452604093849020898155600181018a90556023549451635160f2f360e11b81526004810192909252929650919450919091169063a2c1e5e690602401600060405180830381600087803b15801561199957600080fd5b505af11580156119ad573d6000803e3d6000fd5b50505050806001019050611909565b505050505050565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781600b6000858481518110611a1157611a11614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611a4d81614b17565b9150506119f1565b6000546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781600a6000858481518110611aa257611aa2614b01565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508160096000858481518110611af857611af8614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b3481614b17565b915050611a82565b60008060007f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c9050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc99190614b47565b506001600160701b0391821693501690507f00000000000000000000000055d398326f99059ff775485246999027b3197955306001600160a01b0382161015611c1757829550819450611c1e565b8195508294505b505050509091565b33611c396000546001600160a01b031690565b6001600160a01b03161480611c5857506005546001600160a01b031633145b611c745760405162461bcd60e51b8152600401610f8f90614b8c565b601d54611c909061010090046001600160a01b03168284613010565b5050565b6000546001600160a01b03163314611cbe5760405162461bcd60e51b8152600401610f8f90614a36565b602055565b6000546001600160a01b03163314611ced5760405162461bcd60e51b8152600401610f8f90614a36565b600380546001600160a01b0319166001600160a01b0383169081179091556000908152600960205260409020805460ff19166001179055611d31600a600019614ac6565b6003546001600160a01b03166000908152601b602052604090205550565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610f8f90614a36565b601d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b03163314611dcb5760405162461bcd60e51b8152600401610f8f90614a36565b602655565b6000546001600160a01b03163314611dfa5760405162461bcd60e51b8152600401610f8f90614a36565b603055565b6000546001600160a01b03163314611e295760405162461bcd60e51b8152600401610f8f90614a36565b62030d408110158015611e3f5750621e84808111155b611e755760405162461bcd60e51b815260206004820152600760248201526632302d3230307760c81b6044820152606401610f8f565b603155565b60606007805461139590614a52565b6000546001600160a01b03163314611eb35760405162461bcd60e51b8152600401610f8f90614a36565b60005b82518110156116465781601e6000858481518110611ed657611ed6614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611f1281614b17565b915050611eb6565b6000611f246125db565b6040516370a0823160e01b81523060048201527f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b0316906370a0823190602401602060405180830381865afa158015611f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fac9190614ae8565b611fb69084614aaf565b6114299190614ac6565b6000546001600160a01b03163314611fea5760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b038281166000818152601b6020526040908190208481556023549151635160f2f360e11b8152600481019390935292169063a2c1e5e690602401600060405180830381600087803b15801561204557600080fd5b505af1158015612059573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461208c5760405162461bcd60e51b8152600401610f8f90614a36565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b60006114253384846128d2565b6000546001600160a01b031633146120ee5760405162461bcd60e51b8152600401610f8f90614a36565b8181600081811061210157612101614b01565b6020029190910135601055508181600181811061212057612120614b01565b6020029190910135600f55508181600281811061213f5761213f614b01565b6020029190910135601155508181600381811061215e5761215e614b01565b6020029190910135601255508181600481811061217d5761217d614b01565b6020029190910135601555508181600581811061219c5761219c614b01565b602002919091013560145550818160068181106121bb576121bb614b01565b602002919091013560165550818160078181106121da576121da614b01565b602002919091013560175550601254601154600f546010546121fc9190614be9565b6122069190614be9565b6122109190614be9565b6013556017546016546014546015546122299190614be9565b6122339190614be9565b61223d9190614be9565b6018555050565b6000546001600160a01b0316331461226e5760405162461bcd60e51b8152600401610f8f90614a36565b60005b825181101561164657816009600085848151811061229157612291614b01565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806122cd81614b17565b915050612271565b6000546001600160a01b031633146122ff5760405162461bcd60e51b8152600401610f8f90614a36565b602955565b336123176000546001600160a01b031690565b6001600160a01b0316148061233657506005546001600160a01b031633145b6123525760405162461bcd60e51b8152600401610f8f90614b8c565b7f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b0316836001600160a01b0316036123c15760405162461bcd60e51b815260206004820152600b60248201526a3a37b5b2b71032b93937b960a91b6044820152606401610f8f565b6123cc83828461357e565b6116468147613630565b6000546001600160a01b031633146124005760405162461bcd60e51b8152600401610f8f90614a36565b601f805460ff1916911515919091179055565b336124266000546001600160a01b031690565b6001600160a01b0316148061244557506005546001600160a01b031633145b6124615760405162461bcd60e51b8152600401610f8f90614b8c565b600081116124a15760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081d1bdd185b609a1b6044820152606401610f8f565b602555565b6000546001600160a01b031633146124d05760405162461bcd60e51b8152600401610f8f90614a36565b602855565b60008060006124e2611b3c565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c811660048301529295509093507f00000000000000000000000055d398326f99059ff775485246999027b3197955909116906370a0823190602401602060405180830381865afa158015612570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125949190614ae8565b9050909192565b6000546001600160a01b031633146125c55760405162461bcd60e51b8152600401610f8f90614a36565b80156125d2574360195550565b60006019555b50565b6000602554670de0b6b3a76400006125f39190614aaf565b905090565b6000546001600160a01b031633146126225760405162461bcd60e51b8152600401610f8f90614a36565b61deac196001600160a01b038216016126665760405162461bcd60e51b81526020600482015260066024820152656e307864656160d01b6044820152606401610f8f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336126d46000546001600160a01b031690565b6001600160a01b031614806126f357506005546001600160a01b031633145b61270f5760405162461bcd60e51b8152600401610f8f90614b8c565b602f80546001600160a01b039092166001600160a01b0319909216821790556000908152600960205260409020805460ff19166001179055565b3361275c6000546001600160a01b031690565b6001600160a01b0316148061277b57506005546001600160a01b031633145b6127975760405162461bcd60e51b8152600401610f8f90614b8c565b6127108183856127a7888a614be9565b6127b19190614be9565b6127bb9190614be9565b6127c59190614be9565b11156128065760405162461bcd60e51b815260206004820152601060248201526f3a37ba30b6103930ba329032b93937b960811b6044820152606401610f8f565b602a94909455602b92909255602c55602d55602e55565b336128306000546001600160a01b031690565b6001600160a01b0316148061284f57506005546001600160a01b031633145b61286b5760405162461bcd60e51b8152600401610f8f90614b8c565b602755565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152600b602052604090205460ff16156129275760405162461bcd60e51b8152602060048201526009602482015268189b1858dad31a5cdd60ba1b6044820152606401610f8f565b6001600160a01b038316600090815260016020526040902054818110156129765760405162461bcd60e51b8152602060048201526003602482015262424e4560e81b6044820152606401610f8f565b6001600160a01b03841660009081526009602052604081205460ff161580156129b857506001600160a01b03841660009081526009602052604090205460ff16155b156129fa57846001600160a01b03167f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316146129fa575060015b326001600160a01b03861681148015612a1b5750336001600160a01b038716145b8015612a2f57506001600160a01b03851630145b15612a3e576119bc86856136e8565b856001600160a01b0316816001600160a01b0316148015612a675750336001600160a01b038716145b8015612a7a57506001600160a01b038516155b8015612a9f57506001600160a01b03861660009081526009602052604090205460ff16155b15612b1d57612ab086600086613010565b6024805460405163020d3fc360e11b81526001600160a01b03848116600483015292810187905291169063041a7f8690604401600060405180830381600087803b158015612afd57600080fd5b505af1158015612b11573d6000803e3d6000fd5b50505050505050505050565b6000807f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b0316876001600160a01b0316148015612b705750336000908152601c602052604090205460ff165b8015612b8d5750876001600160a01b0316836001600160a01b0316145b15612bf857612b9b866138fe565b90508015612bf8576001600160a01b0383166000908152601b60205260408120805490935082918491612bcf908490614be9565b9091555050601954600003612bf85780826001016000828254612bf29190614be9565b90915550505b60007f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b0316896001600160a01b031603612cbc57612c3c87613977565b90508015612cbc576001600160a01b0384166000908152601b6020526040902054811115612c6957600080fd5b6001600160a01b0384166000908152601b602052604081208054839290612c91908490614a9c565b90915550506001600160a01b03841660009081526009602052604090205460ff1615612cbc57600094505b6001600160a01b0389166000908152600d602052604090205460ff1680612cfb57506001600160a01b0388166000908152600d602052604090205460ff165b15612e2057601a54600003612d6d576001600160a01b03891660009081526009602052604090205460ff168015612d6357507f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b0316886001600160a01b0316145b15612d6d5743601a555b6001600160a01b03891660009081526009602052604090205460ff16158015612daf57506001600160a01b03881660009081526009602052604090205460ff16155b15612e2057601954600003612dde57601a546000108015612dd05750600082115b612dd957600080fd5b612e20565b81158015612dea575080155b8015612e0357506003601954612e009190614be9565b43105b15612e2057612e158989896063613ad9565b505050505050505050565b612e2e898989888686613b63565b6001600160a01b0389163014612e15578115612ea457602354604051635160f2f360e11b81526001600160a01b0386811660048301529091169063a2c1e5e690602401600060405180830381600087803b158015612e8b57600080fd5b505af1158015612e9f573d6000803e3d6000fd5b505050505b603154602154600003612f5d576023546001600160a01b031663ffb2c4796064612ece8482614aaf565b612ed89190614ac6565b6040518263ffffffff1660e01b8152600401612ef691815260200190565b600060405180830381600087803b158015612f1057600080fd5b505af1925050508015612f21575060015b612f53576040517fefee91e1de77e029c77d49a8e4ed916ea4a401e24bf8f429b1a9d432f31599ec90600090a1612b11565b6001602155612b11565b6024546001600160a01b031663ffb2c4796064612f7a8482614aaf565b612f849190614ac6565b6040518263ffffffff1660e01b8152600401612fa291815260200190565b600060405180830381600087803b158015612fbc57600080fd5b505af1925050508015612fcd575060015b612fff576040517fa2f8809c88625d840ec343cff35dc7fc6a0a88f1c1b642ec595791ca2cba279f90600090a1612b11565b600060215550505050505050505050565b6001600160a01b038316600090815260016020526040902054613034908290614a9c565b6001600160a01b038416600090815260016020526040902055611646838383613ee2565b600e805460ff1916600117905580156135715760408051600280825260608201835260009260208301908036833701905050905030816000815181106130a0576130a0614b01565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000055d398326f99059ff775485246999027b3197955816001815181106130f4576130f4614b01565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e90911690635c11d7959061317990859060009086907f00000000000000000000000072e714ba1e65d8825e5c3831d37a21cc99646054904290600401614bfc565b600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b50506040516370a0823160e01b81526001600160a01b037f00000000000000000000000072e714ba1e65d8825e5c3831d37a21cc9964605481166004830152600093507f00000000000000000000000055d398326f99059ff775485246999027b31979551691506370a0823190602401602060405180830381865afa158015613234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132589190614ae8565b905080156132ac576132ac7f00000000000000000000000055d398326f99059ff775485246999027b31979557f00000000000000000000000072e714ba1e65d8825e5c3831d37a21cc996460543084613f5a565b6000602e54602d54602c54602b54602a546132c79190614be9565b6132d19190614be9565b6132db9190614be9565b6132e59190614be9565b9050600080600080600080871180156132fe5750600086115b156134945785602a54886133129190614aaf565b61331c9190614ac6565b945085602b548861332d9190614aaf565b6133379190614ac6565b935085602d54886133489190614aaf565b6133529190614ac6565b915085602e54886133639190614aaf565b61336d9190614ac6565b905080828561337c888b614a9c565b6133869190614a9c565b6133909190614a9c565b61339a9190614a9c565b925084156133da576023546133da907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b03168761357e565b831561341857600354613418907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b03168661357e565b811561345657602454613456907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b03168461357e565b801561349457602f54613494907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b03168361357e565b8815613568576134f47f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c601d60019054906101000a90046001600160a01b03166127106027548d6134e59190614aaf565b6134ef9190614ac6565b613010565b7f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561354f57600080fd5b505af1158015613563573d6000803e3d6000fd5b505050505b50505050505050505b50600e805460ff19169055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916135da9190614c6d565b6000604051808303816000865af19150503d8060008114613617576040519150601f19603f3d011682016040523d82523d6000602084013e61361c565b606091505b50915091508180156119bc57505050505050565b6001600160a01b038216600003613645575050565b604080516000808252602082019092526001600160a01b03841690839060405161366f9190614c6d565b60006040518083038185875af1925050503d80600081146136ac576040519150601f19603f3d011682016040523d82523d6000602084013e6136b1565b606091505b50509050806116465760405162461bcd60e51b815260206004820152600360248201526222aa2360e91b6044820152606401610f8f565b6000601954116137275760405162461bcd60e51b815260206004820152600a6024820152690dcdee84098c2eadcc6d60b31b6044820152606401610f8f565b613732823083613010565b600061373d82611f1a565b9050600081116137775760405162461bcd60e51b815260206004820152600560248201526406f757420360dc1b6044820152606401610f8f565b6040516370a0823160e01b815230600482015281907f00000000000000000000000055d398326f99059ff775485246999027b31979556001600160a01b0316906370a0823190602401602060405180830381865afa1580156137dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138019190614ae8565b10156138415760405162461bcd60e51b815260206004820152600f60248201526e0eae6c8e840dcdee840cadcdeeaced608b1b6044820152606401610f8f565b6001600160a01b03831660009081526009602052604081205460ff166138b757612710826018546138729190614aaf565b61387c9190614ac6565b6003549091506138b7907f00000000000000000000000055d398326f99059ff775485246999027b3197955906001600160a01b03168361357e565b6138eb7f00000000000000000000000055d398326f99059ff775485246999027b3197955856138e68486614a9c565b61357e565b6138f83061dead85613010565b50505050565b60008060008061390c6124d5565b925092509250600080841180156139235750600083115b1561394057826139338588614aaf565b61393d9190614ac6565b90505b60008211801561395957506139558185614be9565b8210155b1561396e5761396a82878686614006565b5094505b50505050919050565b6000806000806139856124d5565b92509250925082811015613a7a57846139d37f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b031660009081526001602052604090205490565b6139dd9190614a9c565b7f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f9190614ae8565b613a699087614aaf565b613a739190614ac6565b9350613ad1565b601d5460ff1615613ad15760008084118015613a965750600083115b1561396e57613aa58684614a9c565b613aaf8588614aaf565b613ab99190614ac6565b9050613ac58482614be9565b82101561396e57600080fd5b505050919050565b6001600160a01b038416600090815260016020526040902054613afd908390614a9c565b6001600160a01b0385166000908152600160205260408120919091556064613b258385614aaf565b613b2f9190614ac6565b90508015613b4f57600454613b4f9086906001600160a01b031683613ee2565b6115ac8585613b5e8487614a9c565b613ee2565b6001600160a01b038616600090815260016020526040902054613b87908590614a9c565b6001600160a01b0387166000908152600160205260408120919091558315613dad576000806000808611613cb4578415613bd757613bc68a8987614484565b613bd09085614be9565b9350613cb4565b6001600160a01b0389166000908152600d602052604090205460ff1615613c47576001925061271060185489613c0d9190614aaf565b613c179190614ac6565b915061271060165489613c2a9190614aaf565b613c349190614ac6565b9050613c408183614a9c565b9150613cb4565b6001600160a01b038a166000908152600d602052604090205460ff1615613c965761271060135489613c799190614aaf565b613c839190614ac6565b915061271060115489613c2a9190614aaf565b61271060305489613ca79190614aaf565b613cb19190614ac6565b91505b8015613cd357613cc48185614be9565b9350613cd38a61dead83613ee2565b8115613cfe57613ce38285614be9565b600454909450613cfe908b906001600160a01b031684613ee2565b6001600160a01b0389166000908152601e602052604090205460ff16158015613d295750601f5460ff165b15613da957602080546001600160a01b038b16600090815260019092526040909120548590613d59908b90614be9565b613d639190614a9c565b1115613da95760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401610f8f565b5050505b6001600160a01b0387166000908152600d602052604090205460ff168015613dee57506001600160a01b0386166000908152600a602052604090205460ff16155b15613e40576001600160a01b0386167fccb699991f181b9bc36d047361c8d3e53a29fd847a3aba6dfac843ce7ddbd689613e288388614a9c565b60408051918252600160208301520160405180910390a25b6001600160a01b0386166000908152600d602052604090205460ff168015613e8157506001600160a01b0387166000908152600a602052604090205460ff16155b15613ed3576001600160a01b0386167fccb699991f181b9bc36d047361c8d3e53a29fd847a3aba6dfac843ce7ddbd689613ebb8388614a9c565b60408051918252600260208301520160405180910390a25b6120598787613b5e8489614a9c565b6001600160a01b038216600090815260016020526040902054613f06908290614be9565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906128c59085815260200190565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092871691613fba91614c6d565b6000604051808303816000865af19150503d8060008114613ff7576040519150601f19603f3d011682016040523d82523d6000602084013e613ffc565b606091505b5050505050505050565b60008060007f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d9190614ae8565b905060007f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141139190614c89565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015614150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141749190614c89565b90506000806001600160a01b0316826001600160a01b03161415905060007f0000000000000000000000002c8a0b9c064a771f0c0380f9f2bfd8ab5df4db6c6001600160a01b0316637464fc3d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142149190614ae8565b9050811561440a57801561440a576000614236614231898b614aaf565b6145a2565b90506000614243836145a2565b905080821115614407576000807310ed43c718714eb63d5aa57b78b54704e256024d197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016142dd5761429f8385614a9c565b6142a99089614aaf565b6142b4906008614aaf565b91506142c1836008614aaf565b6142cc856011614aaf565b6142d69190614be9565b90506143e5565b73d99d1c33f9fc3444f8101754abc46c52416550d0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016143445761432c8385614a9c565b6143369089614aaf565b9150826142cc856003614aaf565b73e9d6f80028671279a28790bb4007b10b0595def0197f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b0316016143b6576143938385614a9c565b61439d9089614aaf565b6143a8906003614aaf565b9150826142cc856005614aaf565b6143c08385614a9c565b6143ca9089614aaf565b9150826143d8856005614aaf565b6143e29190614be9565b90505b6143ef8183614ac6565b98508815614404576144018989614be9565b97505b50505b50505b6000614416898c614a9c565b905084600003614441576103e86144306142318c84614aaf565b61443a9190614a9c565b9650614476565b6144738961444f8784614aaf565b6144599190614ac6565b89614464888e614aaf565b61446e9190614ac6565b614612565b96505b505050505094509492505050565b326000908152601b60205260408120600181015481548391906144a8908690614be9565b6144b29190614a9c565b90508380828111156144c15750815b60008115614527576144d38284614a9c565b925061271060285488848b6144e89190614aaf565b6144f29190614ac6565b6144fc9190614aaf565b6145069190614ac6565b90506145128187614be9565b95508015614527576145278961dead83613ee2565b600061271060295489868c61453c9190614aaf565b6145469190614ac6565b6145509190614aaf565b61455a9190614ac6565b9050801561457b5761456c8188614be9565b965061457b8a61dead83613ee2565b8386600101600082825461458f9190614a9c565b90915550969a9950505050505050505050565b6000600382111561460357508060006145bc600283614ac6565b6145c7906001614be9565b90505b818110156145fd579050806002816145e28186614ac6565b6145ec9190614be9565b6145f69190614ac6565b90506145ca565b50919050565b811561460d575060015b919050565b60008183106146215781614623565b825b9392505050565b6001600160a01b03811681146125d857600080fd5b803561460d8161462a565b60006020828403121561465c57600080fd5b81356146238161462a565b60005b8381101561468257818101518382015260200161466a565b50506000910152565b60208152600082518060208401526146aa816040850160208701614667565b601f01601f19169190910160400192915050565b600080604083850312156146d157600080fd5b82356146dc8161462a565b946020939093013593505050565b8035801515811461460d57600080fd5b6000806040838503121561470d57600080fd5b82356147188161462a565b9150614726602084016146ea565b90509250929050565b60008060006060848603121561474457600080fd5b833561474f8161462a565b9250602084013561475f8161462a565b929592945050506040919091013590565b60006020828403121561478257600080fd5b5035919050565b60006020828403121561479b57600080fd5b614623826146ea565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126147cb57600080fd5b8135602067ffffffffffffffff808311156147e8576147e86147a4565b8260051b604051601f19603f8301168101818110848211171561480d5761480d6147a4565b60405293845285810183019383810192508785111561482b57600080fd5b83870191505b84821015614851576148428261463f565b83529183019190830190614831565b979650505050505050565b6000806040838503121561486f57600080fd5b823567ffffffffffffffff81111561488657600080fd5b614892858286016147ba565b95602094909401359450505050565b600080604083850312156148b457600080fd5b823567ffffffffffffffff8111156148cb57600080fd5b6148d7858286016147ba565b925050614726602084016146ea565b600080604083850312156148f957600080fd5b82359150602083013561490b8161462a565b809150509250929050565b6000806020838503121561492957600080fd5b823567ffffffffffffffff8082111561494157600080fd5b818501915085601f83011261495557600080fd5b81358181111561496457600080fd5b8660208260051b850101111561497957600080fd5b60209290920196919550909350505050565b6000806000606084860312156149a057600080fd5b83356149ab8161462a565b92506020840135915060408401356149c28161462a565b809150509250925092565b600080604083850312156149e057600080fd5b82356149eb8161462a565b9150602083013561490b8161462a565b600080600080600060a08688031215614a1357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b602080825260029082015261216f60f01b604082015260600190565b600181811c90821680614a6657607f821691505b6020821081036145fd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561142957611429614a86565b808202811582820484141761142957611429614a86565b600082614ae357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614afa57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201614b2957614b29614a86565b5060010190565b80516001600160701b038116811461460d57600080fd5b600080600060608486031215614b5c57600080fd5b614b6584614b30565b9250614b7360208501614b30565b9150604084015163ffffffff811681146149c257600080fd5b60208082526037908201527f4f6e6c79206f776e6572206f72206d61696e74656e616e63652077616c6c657460408201527f2063616e2063616c6c20746869732066756e6374696f6e000000000000000000606082015260800190565b8082018082111561142957611429614a86565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c4c5784516001600160a01b031683529383019391830191600101614c27565b50506001600160a01b03969096166060850152505050608001529392505050565b60008251614c7f818460208701614667565b9190910192915050565b600060208284031215614c9b57600080fd5b81516146238161462a56fea2646970667358221220e2fda9742c05c74dbb6f53f9a0965ed54cd107dd7c0b7aa865307bb10f607f8764736f6c63430008130033

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.