BNB Price: $615.06 (+2.99%)
 

Overview

Max Total Supply

10,000,000,000AGA

Holders

4,674

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.1 AGA

Value
$0.00
0xe4945f8672bd4f1547a3bdf8b1181e1609de404f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x56D12d01...150999999
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at BscScan.com on 2025-08-23
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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

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

    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 factory() external pure returns (address);

    function WETH() external pure returns (address);

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

interface ISwapFactory {
    function feeTo() external view returns (address);

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

abstract contract Ownable {
    address internal _owner;

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

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

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

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

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

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

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}

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

    function token0() external view returns (address);

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

    function totalSupply() external view returns (uint256);
}

interface IWBNB {
    function withdraw(uint wad) external; //unwarp WBNB -> BNB
}

contract Token is IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address payable public fundAddress;

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 public kb = 3;
    uint256 public maxBuyAmount;

    uint256 public maxWalletAmount;
    bool public limitEnable = true;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _rewardList;
    mapping(address => bool) public isMaxEatExempt;

    uint256 private _tTotal;

    ISwapRouter public _swapRouter;
    address public currency;
    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);
    TokenDistributor public _tokenDistributor;
    TokenDistributor public _rewardTokenDistributor;

    uint256 public _buyFundFee;
    uint256 public _buyLiquidityFee;
    uint256 public _buyRewardFee;
    uint256 public _buyBurnFee;
    uint256 public _sellFundFee;
    uint256 public _sellLiquidityFee;
    uint256 public _sellRewardFee;
    uint256 public _sellBurnFee;

    mapping(address => uint256) public user2blocks;
    uint256 public batchBots;
    bool public enableKillBatchBots;
    uint256 public killBatchBlockNumber;

    bool public currencyIsEth;

    address public ETH;
    uint256 public startTradeBlock;

    address public _mainPair;

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;
    bool public enableSwapLimit;
    bool public enableWalletLimit;
    bool public enableChangeTax;
    bool public enableInvitor = true;

    address[] public rewardPath;
    address public ReceiveAddress;

    constructor(
        string[] memory stringParams,
        address[] memory addressParams,
        uint256[] memory numberParams,
        bool[] memory boolParams
    ) {
        _name = stringParams[0];
        _symbol = stringParams[1];
        _decimals = numberParams[0];
        uint256 total = numberParams[1];
        _tTotal = total;
        swapAtAmount = total / 10000;
        fundAddress = payable(addressParams[0]);
        generateLpReceiverAddr = fundAddress;


        currency = addressParams[1];
        ISwapRouter swapRouter = ISwapRouter(addressParams[2]);
        ReceiveAddress = addressParams[3];
        ETH = addressParams[4];

        maxBuyAmount = numberParams[2];
        // MSA = numberParams[3];

        maxWalletAmount = numberParams[4];

        enableOffTrade = boolParams[0];
        enableKillBlock = boolParams[1];
        enableRewardList = boolParams[2];

        enableSwapLimit = boolParams[3];
        enableWalletLimit = boolParams[4];
        enableChangeTax = boolParams[5];
        currencyIsEth = boolParams[6];
        enableKillBatchBots = boolParams[7];
        enableTransferFee = boolParams[8];
        antiSYNC = boolParams[9];

        if (currencyIsEth) {
            currency = swapRouter.WETH();
        }

        rewardPath = [currency];
        if (currency != ETH) {
            if (currencyIsEth == false) {
                rewardPath.push(swapRouter.WETH());
            }
            if (ETH != swapRouter.WETH()) rewardPath.push(ETH);
        }

        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        _allowances[address(msg.sender)][address(swapRouter)] = MAX;
        IERC20(currency).approve(address(swapRouter), MAX);
        //require(currency < address(this),"??");

        _swapRouters[address(swapRouter)] = true;

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address swapPair = swapFactory.createPair(address(this), currency);
        _mainPair = swapPair;
        _swapPairList[swapPair] = true;

        _buyFundFee = numberParams[5];
        _buyLiquidityFee = numberParams[6];
        _buyRewardFee = numberParams[7];
        _buyBurnFee = numberParams[8];

        _sellFundFee = numberParams[9];
        _sellLiquidityFee = numberParams[10];
        _sellRewardFee = numberParams[11];
        _sellBurnFee = numberParams[12];

        killBatchBlockNumber = numberParams[13];
        kb = numberParams[14];
        airdropNumbs = numberParams[15];


        //invitor
        beInvitorThreshold = numberParams[16];
        require(numberParams[17] <= 7, "length should be <= 7");
        invitorRewardPercentList = new uint256[](numberParams[17]);
        totalInvitorFee = 0;
        for (uint256 i = 0; i < invitorRewardPercentList.length; i++) {
            invitorRewardPercentList[i] = numberParams[18 + i];
            totalInvitorFee += invitorRewardPercentList[i];
        }


        if (enableTransferFee) {
            transferFee =
                _sellFundFee +
                _sellLiquidityFee +
                _sellRewardFee +
                _sellBurnFee +
                totalInvitorFee;
        }

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

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[tx.origin] = true;

        isMaxEatExempt[tx.origin] = true;
        isMaxEatExempt[fundAddress] = true;
        isMaxEatExempt[ReceiveAddress] = true;
        isMaxEatExempt[address(swapRouter)] = true;
        isMaxEatExempt[address(_mainPair)] = true;
        isMaxEatExempt[address(this)] = true;
        isMaxEatExempt[address(0xdead)] = true;

        excludeHolder[address(0)] = true;
        excludeHolder[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        holderRewardCondition = 10 ** IERC20(ETH).decimals() / 10;

        _tokenDistributor = new TokenDistributor(currency);
        // _rewardTokenDistributor = new TokenDistributor(ETH);
    }

    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 (uint256) {
        return _decimals;
    }

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

    bool public antiSYNC;

    function setAntiSYNCEnable(bool s) public onlyOwner {
        antiSYNC = s;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == _mainPair && msg.sender == _mainPair && antiSYNC) {
            require(_balances[_mainPair] > 0, "!sync");
        }
        return _balances[account];
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisMaxEatExempt(address holder, bool exempt) external onlyOwner {
        isMaxEatExempt[holder] = exempt;
    }

    function setkb(uint256 a) public onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns (uint256) {
        if (_rewardList[account]) {
            return 1;
        } else {
            return 0;
        }
    }

    bool public airdropEnable = true;

    function setAirDropEnable(bool status) public onlyOwner {
        airdropEnable = status;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    uint256 public airdropNumbs = 0;

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        airdropNumbs = newValue;
    }

    bool public enableTransferFee = false;

    function setEnableTransferFee(bool status) public onlyOwner {
        // enableTransferFee = status;
        if (status) {
            transferFee =
                _sellFundFee +
                _sellLiquidityFee +
                _sellRewardFee +
                _sellBurnFee +
                totalInvitorFee;
        } else {
            transferFee = 0;
        }
    }

    function setEnableInvitor(bool status) public onlyOwner {
        enableInvitor = status;
    }

    bool public isAddV2;
    bool public isRemoveV2;

    uint256 public numTokensSellRate = 100; // 100%

    function setNumTokensSellRate(uint256 newValue) public onlyOwner {
        numTokensSellRate = newValue;
    }

    uint256 public swapAtAmount = 0;

    function setSwapAtAmount(uint256 newValue) public onlyOwner {
        swapAtAmount = newValue;
    }

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

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

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

        balanceOther = IERC20(tokenOther).balanceOf(_mainPair);
    }

    function _isAddLiquidity(
        uint256 amount
    ) internal view returns (bool isAdd) {
        (uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
        isAdd = balanceOther > rOther;
    }

    function _isRemoveLiquidity(
        uint256 amount
    ) internal view returns (uint256 liquidity) {
        (uint256 rOther, , uint256 balanceOther) = _getReserves();
        //isRemoveLP
        if (balanceOther <= rOther) {
            liquidity =
                (amount * ISwapPair(_mainPair).totalSupply()) /
                (balanceOf(_mainPair) - amount);
        }
    }

    function _transfer(address from, address to, uint256 amount) private {
        uint256 balance = _balances[from];
        require(balance >= amount, "balanceNotEnough");

        if (isReward(from) > 0) {
            require(false, "isReward > 0 !");
        }
        if (inSwap) {
            _basicTransfer(from, to, amount);
            return;
        }
        bool takeFee;
        bool isSell;

        bool isTransfer;
        bool isRemove;
        bool isAdd;

        if (to == _mainPair && _swapRouters[msg.sender] && tx.origin == from) {
            if (_isAddLiquidity(amount) && !isContract(from)) {
                isAdd = true;
                isAddV2 = isAdd;
            }
        }

        uint256 removeLPLiquidity;
        if (from == _mainPair) {
            removeLPLiquidity = _isRemoveLiquidity(amount);
            if (removeLPLiquidity > 0) {
                isRemove = true;
                isRemoveV2 = isRemove;
            }
        }

        if (
            !_feeWhiteList[from] &&
            !_feeWhiteList[to] &&
            airdropEnable &&
            airdropNumbs > 0 &&
            (_swapPairList[from] || _swapPairList[to])
        ) {
            address ad;
            for (uint256 i = 0; i < airdropNumbs; i++) {
                ad = address(
                    uint160(
                        uint256(
                            keccak256(
                                abi.encodePacked(i, amount, block.timestamp)
                            )
                        )
                    )
                );
                _basicTransfer(from, ad, 1);
            }
            amount -= airdropNumbs * 1;
        }

        if (startTradeBlock == 0 && enableOffTrade) {
            if (
                !_feeWhiteList[from] &&
                !_feeWhiteList[to] &&
                !_swapPairList[from] &&
                !_swapPairList[to]
            ) {
                require(!isContract(to), "cant add other lp");
            }
        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (enableOffTrade) {
                    bool star = startTradeBlock > 0;
                    require(star || (0 < startLPBlock && isAdd), "pausing");
                }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb &&
                    !_swapPairList[to]
                ) {
                    _rewardList[to] = true;
                    // _funTransfer(from, to, amount);
                }

                if (
                    enableKillBatchBots &&
                    _swapPairList[from] &&
                    block.number < startTradeBlock + killBatchBlockNumber
                ) {
                    if (block.number != user2blocks[tx.origin]) {
                        user2blocks[tx.origin] = block.number;
                    } else {
                        batchBots++;
                        _funTransfer(from, to, amount);
                        return;
                    }
                }

                if (_swapPairList[to]) {
                    if (!inSwap && !isAdd) {
                        uint256 contractTokenBalance = _balances[address(this)];
                        if (contractTokenBalance > swapAtAmount) {
                            uint256 swapFee = _buyFundFee +
                                _buyRewardFee +
                                _buyLiquidityFee +
                                _sellFundFee +
                                _sellRewardFee +
                                _sellLiquidityFee;
                            uint256 numTokensSellToFund = (contractTokenBalance *
                                numTokensSellRate) / 100;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                if (!isAdd && !isRemove) takeFee = true; // just swap fee
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }

        if (!_swapPairList[from] && !_swapPairList[to]) {
            isTransfer = true;
        }

        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            isSell,
            isTransfer,
            isAdd,
            isRemove
        );

        if (from != address(this)) {
            if (isSell) {
                addHolder(from);
            }
            processReward(lpRewardGas);
        }
    }

    function multiAddHolder(address[] calldata accounts) public onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            if (ISwapPair(_mainPair).balanceOf(accounts[i]) > 0) {
                addHolder(accounts[i]);
            }
        }
    }

    uint256 public lpRewardGas = 350000;

    function setLpRewardGas(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 2000000,
            "too high or too low"
        );
        lpRewardGas = newValue;
    }

    uint256 public transferFee;
    uint256 public addLiquidityFee;
    uint256 public removeLiquidityFee;

    function setTransferFee(uint256 newValue) public onlyOwner {
        transferFee = newValue;
    }

    function setAddLiquidityFee(uint256 newValue) public onlyOwner {
        addLiquidityFee = newValue;
    }

    function setRemoveLiquidityFee(uint256 newValue) public onlyOwner {
        // require(newValue <= 9000, "remove Lp> 50 !");
        removeLiquidityFee = newValue;
    }

    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = (tAmount * 90) / 100;
        _takeTransfer(sender, fundAddress, feeAmount);
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    mapping(address => address) public _invitor;

    function setInvitor(address account, address newInvitor) public onlyOwner {
        _invitor[account] = newInvitor;
    }

    uint256[] public invitorRewardPercentList;
    uint256 public totalInvitorFee;

    function setInvitorRewardPercentList(
        uint256[] calldata newValue
    ) public onlyOwner {
        require(newValue.length <= 7, "length should be <= 7 !");
        invitorRewardPercentList = new uint256[](newValue.length);
        totalInvitorFee = 0;
        for (uint256 i = 0; i < newValue.length; i++) {
            invitorRewardPercentList[i] = newValue[i];
            totalInvitorFee += invitorRewardPercentList[i];
        }
    }

    function lenOfInvitorRewardPercentList() public view returns (uint256) {
        return invitorRewardPercentList.length;
    }

    uint256 public beInvitorThreshold = 0;

    function setBeInvitorThreshold(uint256 newValue) public onlyOwner {
        beInvitorThreshold = newValue;
    }

    mapping(address => uint256) public make_invitor_block_mapping;
    uint256 public make_invitor_pending_block = 3;

    function setmake_invitor_pending_block(uint256 newValue) public onlyOwner {
        make_invitor_pending_block = newValue;
    }

    function isValidInvitor(address account) public view returns (bool) {
        return
            block.number - make_invitor_block_mapping[account] >=
            make_invitor_pending_block;
    }

    event cantBindCa(address caAddr);
    event bindSuccessful(
        address indexed sender,
        address indexed receiver,
        uint256 blockNumber
    );
    event bot();

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool isTransfer,
        bool isAdd,
        bool isRemove
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            if (enableInvitor) {
                //invitor reward
                address current;
                if (_swapPairList[sender]) {
                    current = recipient;
                } else {
                    current = sender;
                }

                uint256 inviterAmount;

                uint256 totalShare = 0;

                for (uint256 i; i < invitorRewardPercentList.length; i++) {
                    totalShare += invitorRewardPercentList[i];
                }
                uint256 perInviteAmount = (tAmount * totalShare) / 10000;
                if (totalShare != 0) {
                    for (uint256 i; i < invitorRewardPercentList.length; ++i) {
                        address inviter = _invitor[current];

                        if (address(0) == inviter) {
                            inviter = fundAddress;
                        } else {
                            if (!isValidInvitor(current)) {
                                //被抢跑
                                _invitor[current] = address(0);
                                make_invitor_block_mapping[current] = 0;
                                inviter = fundAddress;
                            }
                        }

                        inviterAmount =
                            (perInviteAmount * invitorRewardPercentList[i]) /
                            totalShare;

                        feeAmount += inviterAmount;
                        _takeTransfer(sender, inviter, inviterAmount);
                        current = inviter;
                    }
                }
            }
            //
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellRewardFee + _sellLiquidityFee;
            } else {
                swapFee = _buyFundFee + _buyLiquidityFee + _buyRewardFee;
                if (enableSwapLimit) {
                    require(tAmount <= maxBuyAmount, "over max buy amount");
                }
            }

            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }

            uint256 burnAmount;
            if (!isSell) {
                //buy
                burnAmount = (tAmount * _buyBurnFee) / 10000;
            } else {
                //sell
                burnAmount = (tAmount * _sellBurnFee) / 10000;
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, address(0xdead), burnAmount);
            }
        }

        if (
            !_swapPairList[sender] && !_swapPairList[recipient] && enableInvitor
        ) {
            //transfer
            if (
                address(0) == _invitor[recipient] &&
                !_feeWhiteList[recipient] &&
                _balances[recipient] < beInvitorThreshold
            ) {
                if (isContract(recipient)) {
                    emit cantBindCa(recipient);
                } else if (isContract(sender)) {
                    emit cantBindCa(sender);
                } else if (
                    tAmount - feeAmount + _balances[recipient] >=
                    beInvitorThreshold
                ) {
                    _invitor[recipient] = sender;
                    make_invitor_block_mapping[recipient] = block.number;
                    emit bindSuccessful(sender, recipient, block.number);
                }
            } else if (
                address(0) != _invitor[recipient] && !_feeWhiteList[recipient]
            ) {
                if (!isValidInvitor(recipient)) {
                    //被抢跑
                    _invitor[recipient] = address(0);
                    make_invitor_block_mapping[recipient] = 0;
                    emit bot();
                }
            }
        }

        if (isTransfer && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 transferFeeAmount;
            transferFeeAmount = (tAmount * transferFee) / 10000;

            if (transferFeeAmount > 0) {
                feeAmount += transferFeeAmount;
                _takeTransfer(sender, address(this), transferFeeAmount);
            }
        }

        if (isAdd && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 addLiquidityFeeAmount;
            addLiquidityFeeAmount = (tAmount * addLiquidityFee) / 10000;

            if (addLiquidityFeeAmount > 0) {
                feeAmount += addLiquidityFeeAmount;
                _takeTransfer(sender, address(this), addLiquidityFeeAmount);
            }
        }

        if (isRemove && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 removeLiquidityFeeAmount;
            removeLiquidityFeeAmount = (tAmount * removeLiquidityFee) / 10000;

            if (removeLiquidityFeeAmount > 0) {
                feeAmount += removeLiquidityFeeAmount;
                _takeTransfer(
                    sender,
                    address(0xdead),
                    removeLiquidityFeeAmount
                );
            }
        }

        if (!isMaxEatExempt[recipient] && enableWalletLimit)
            require(
                (_balances[recipient] + tAmount - feeAmount) <= maxWalletAmount,
                "over max wallet limit"
            );
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 value
    );
    event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
    // event Failed_addLiquidityETH();
    event Failed_AddLiquidity();
    uint256 public totalFundAmountReceive;

    address public generateLpReceiverAddr;

    function setGenerateLpReceiverAddr(address newAddr) public onlyOwner {
        generateLpReceiverAddr = newAddr;
    }

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 swapFee
    ) private lockTheSwap {
        if (swapFee == 0 || tokenAmount == 0) {
            return;
        }

        uint256 lpFee = _sellLiquidityFee + _buyLiquidityFee;
        uint256 lpAmount = (tokenAmount * lpFee) / 2 / swapFee;
        uint256 totalShare = swapFee - lpFee / 2;

        IERC20 _c = IERC20(currency);

        address[] memory toCurrencyPath = new address[](2);
        toCurrencyPath[0] = address(this);
        toCurrencyPath[1] = currency;
        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount,
                0,
                toCurrencyPath,
                address(_tokenDistributor),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                0
            );
        }

        uint256 newBal = _c.balanceOf(address(_tokenDistributor));
        if (newBal != 0) {
            _c.transferFrom(address(_tokenDistributor), address(this), newBal);
        }

        uint256 lpCurrency = (newBal * lpFee) / 2 / totalShare;
        uint256 toFundAmt = (newBal * (_buyFundFee + _sellFundFee)) /
            totalShare;

        // fund
        if (toFundAmt > 0) {
            if (currencyIsEth) {
                IWBNB(currency).withdraw(toFundAmt);
                fundAddress.transfer(toFundAmt);
            } else {
                _c.transfer(fundAddress, toFundAmt);
            }
            totalFundAmountReceive += toFundAmt;
        }

        // generate lp
        if (lpAmount > 0 && lpCurrency > 0) {
            try
                _swapRouter.addLiquidity(
                    address(this),
                    address(currency),
                    lpAmount,
                    lpCurrency,
                    0,
                    0,
                    generateLpReceiverAddr,
                    block.timestamp
                )
            {} catch {
                emit Failed_AddLiquidity();
            }
        }
        // lpreward
        if (_buyRewardFee + _sellRewardFee == 0) {
            return;
        }

        if (ETH == currency) {
            return;
        }

        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                _c.balanceOf(address(this)),
                0,
                rewardPath,
                address(this),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                1
            );
        }
    }

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

    function setFundAddress(address payable addr) external onlyOwner {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function isContract(address _addr) private view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    uint256 public startLPBlock;

    function startLP() external onlyOwner {
        startLPBlock = block.number;
    }

    function stopLP() external onlyOwner {
        startLPBlock = 0;
    }

    function launch() external onlyOwner {
        startTradeBlock = block.number;
    }

    function setFeeWhiteList(
        address[] calldata addr,
        bool enable
    ) public onlyOwner {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        _buyFundFee = customs[0];
        _buyLiquidityFee = customs[1];
        _buyRewardFee = customs[2];
        _buyBurnFee = customs[3];

        _sellFundFee = customs[4];
        _sellLiquidityFee = customs[5];
        _sellRewardFee = customs[6];
        _sellBurnFee = customs[7];

    }

    function multi_bclist(
        address[] calldata addresses,
        bool value
    ) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }

    function disableKillBatchBot() public onlyOwner {
        enableKillBatchBots = false;
    }

    function disableSwapLimit() public onlyOwner {
        enableSwapLimit = false;
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

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

    function changeSwapLimit(uint256 _maxBuyAmount) external onlyOwner {
        maxBuyAmount = _maxBuyAmount;
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    function claimBalance() external {
        fundAddress.transfer(address(this).balance);
    }

    function claimToken(
        address token,
        uint256 amount,
        address to
    ) external onlyFunder {
        IERC20(token).transfer(to, amount);
    }

    modifier onlyFunder() {
        require(_owner == msg.sender || fundAddress == msg.sender, "!Funder");
        _;
    }

    receive() external payable {}

    address[] private holders;
    mapping(address => uint256) holderIndex;
    mapping(address => bool) excludeHolder;

    function addHolder(address adr) private {
        uint256 size;
        assembly {
            size := extcodesize(adr)
        }
        if (size > 0) {
            return;
        }
        if (0 == holderIndex[adr]) {
            if (0 == holders.length || holders[0] != adr) {
                holderIndex[adr] = holders.length;
                holders.push(adr);
            }
        }
    }

    function getUserHoldLpTokenAmount(
        address user
    ) public view returns (uint256) {
        ISwapPair mainPair = ISwapPair(_mainPair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = currency;
        uint256 r;
        if (tokenOther < address(this)) {
            r = r1;
        } else {
            r = r0;
        }
        if (mainPair.totalSupply() != 0) {
            return (mainPair.balanceOf(user) * r) / mainPair.totalSupply();
        } else {
            return 0;
        }
    }

    uint256 public minAmountInHoldingLpToDividend;

    function setMinAmountInHoldingLpToDividend(
        uint256 newValue
    ) public onlyOwner {
        minAmountInHoldingLpToDividend = newValue;
    }

    uint256 public minTokenBlanceToDividend;

    function setMinTokenBlanceToDividend(uint256 newValue) public onlyOwner {
        minTokenBlanceToDividend = newValue;
    }

    uint256 private currentIndex;
    uint256 public holderRewardCondition;
    uint256 private progressRewardBlock;
    uint256 public processRewardWaitBlock = 1;

    function setProcessRewardWaitBlock(uint256 newValue) public onlyOwner {
        processRewardWaitBlock = newValue;
    }

    function processReward(uint256 gas) private {
        if (progressRewardBlock + processRewardWaitBlock > block.number) {
            return;
        }

        IERC20 FIST = IERC20(ETH);

        uint256 balance = FIST.balanceOf(address(this));
        if (balance < holderRewardCondition) {
            return;
        }

        // FIST.transferFrom(
        //     address(_rewardTokenDistributor),
        //     address(this),
        //     balance
        // );

        IERC20 holdToken = IERC20(_mainPair);
        uint256 holdTokenTotal = holdToken.totalSupply();

        address shareHolder;
        uint256 tokenBalance;
        uint256 amount;

        uint256 shareholderCount = holders.length;

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();
        balance = FIST.balanceOf(address(this));
        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }
            shareHolder = holders[currentIndex];
            tokenBalance = holdToken.balanceOf(shareHolder);
            if (
                tokenBalance > 0 &&
                !excludeHolder[shareHolder] &&
                _balances[shareHolder] >= minTokenBlanceToDividend //&&
                // getUserHoldLpTokenAmount(shareHolder) >=
                // minAmountInHoldingLpToDividend
            ) {
                amount = (balance * tokenBalance) / holdTokenTotal;
                if (amount > 0 && FIST.balanceOf(address(this)) > amount) {
                    FIST.transfer(shareHolder, amount);
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }

        progressRewardBlock = block.number;
    }

    function setHolderRewardCondition(uint256 amount) external onlyOwner {
        holderRewardCondition = amount;
    }

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string[]","name":"stringParams","type":"string[]"},{"internalType":"address[]","name":"addressParams","type":"address[]"},{"internalType":"uint256[]","name":"numberParams","type":"uint256[]"},{"internalType":"bool[]","name":"boolParams","type":"bool[]"}],"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":[],"name":"Failed_AddLiquidity","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","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":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"bindSuccessful","type":"event"},{"anonymous":false,"inputs":[],"name":"bot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caAddr","type":"address"}],"name":"cantBindCa","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ReceiveAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"_invitor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardTokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","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":[],"name":"antiSYNC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"batchBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beInvitorThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"changeSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","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":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableKillBatchBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableInvitor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBatchBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwapLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateLpReceiverAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserHoldLpTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"invitorRewardPercentList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAddV2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRemoveV2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isValidInvitor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBatchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lenOfInvitorRewardPercentList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"make_invitor_block_mapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"make_invitor_pending_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountInHoldingLpToDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBlanceToDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"multiAddHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewardWaitBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAddLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"s","type":"bool"}],"name":"setAntiSYNCEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setBeInvitorThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableInvitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setGenerateLpReceiverAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"newInvitor","type":"address"}],"name":"setInvitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newValue","type":"uint256[]"}],"name":"setInvitorRewardPercentList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setLpRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinAmountInHoldingLpToDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinTokenBlanceToDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProcessRewardWaitBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setRemoveLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","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":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisMaxEatExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setmake_invitor_pending_block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLPBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFundAmountReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInvitorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"user2blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x608060405260036007819055600a805460ff1990811660019081179092556022805460ff60d01b1916600160d01b1790556024805460ff60a81b1916600160a81b17905560006025819055602680549092169091556064602755602881905562055730602a55603155603391909155603f553480156200007e57600080fd5b506040516200698038038062006980833981016040819052620000a19162001365565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35083600081518110620000f857620000f862001769565b602002602001015160049080519060200190620001179291906200106f565b50836001815181106200012e576200012e62001769565b6020026020010151600590805190602001906200014d9291906200106f565b508160008151811062000164576200016462001769565b60200260200101516006819055506000826001815181106200018a576200018a62001769565b6020026020010151905080600e8190555061271081620001ab9190620015ce565b60285583518490600090620001c457620001c462001769565b6020908102919091010151600380546001600160a01b039092166001600160a01b031992831681179091556035805490921617905583518490600190811062000211576200021162001769565b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060008460028151811062000257576200025762001769565b602002602001015190508460038151811062000277576200027762001769565b6020026020010151602460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084600481518110620002bb57620002bb62001769565b6020026020010151602060016101000a8154816001600160a01b0302191690836001600160a01b0316021790555083600281518110620002ff57620002ff62001769565b60200260200101516008819055508360048151811062000323576200032362001769565b60200260200101516009819055508260008151811062000347576200034762001769565b6020026020010151602260146101000a81548160ff021916908315150217905550826001815181106200037e576200037e62001769565b6020026020010151602260156101000a81548160ff02191690831515021790555082600281518110620003b557620003b562001769565b6020026020010151602260166101000a81548160ff02191690831515021790555082600381518110620003ec57620003ec62001769565b6020026020010151602260176101000a81548160ff0219169083151502179055508260048151811062000423576200042362001769565b6020026020010151602260186101000a81548160ff021916908315150217905550826005815181106200045a576200045a62001769565b6020026020010151602260196101000a81548160ff0219169083151502179055508260068151811062000491576200049162001769565b602090810291909101810151815460ff1916901515179055825183906007908110620004c157620004c162001769565b6020026020010151601e60006101000a81548160ff02191690831515021790555082600881518110620004f857620004f862001769565b6020026020010151602660006101000a81548160ff021916908315150217905550826009815181106200052f576200052f62001769565b60209081029190910181015160248054911515600160a01b0260ff60a01b199092169190911790555460ff1615620005f757806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200059b57600080fd5b505afa158015620005b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d6919062001340565b601080546001600160a01b0319166001600160a01b03929092169190911790555b60408051602081019091526010546001600160a01b0316815262000620906023906001620010fe565b506020546010546001600160a01b039081166101009092041614620007dd5760205460ff16620006f4576023816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200068657600080fd5b505afa1580156200069b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006c1919062001340565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200072e57600080fd5b505afa15801562000743573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000769919062001340565b60205461010090046001600160a01b03908116911614620007dd57602054602380546001810182556000919091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546101009092046001600160a01b03166001600160a01b03199092169190911790555b600f80546001600160a01b0319166001600160a01b0383811691821790925530600090815260026020818152604080842085855282528084206000199081905533855292825280842085855290915291829020819055601054915163095ea7b360e01b8152600481019390935260248301529091169063095ea7b390604401602060405180830381600087803b1580156200087757600080fd5b505af11580156200088c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b2919062001522565b506001600160a01b0381166000818152602960209081526040808320805460ff19166001179055805163c45a015560e01b8152905192939263c45a015592600480840193919291829003018186803b1580156200090e57600080fd5b505afa15801562000923573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000949919062001340565b6010546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192506000919083169063c9c6539690604401602060405180830381600087803b1580156200099d57600080fd5b505af1158015620009b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d8919062001340565b602280546001600160a01b0319166001600160a01b0383169081179091556000908152601160205260409020805460ff1916600117905586519091508690600590811062000a2a5762000a2a62001769565b60200260200101516014819055508560068151811062000a4e5762000a4e62001769565b60200260200101516015819055508560078151811062000a725762000a7262001769565b60200260200101516016819055508560088151811062000a965762000a9662001769565b60200260200101516017819055508560098151811062000aba5762000aba62001769565b602002602001015160188190555085600a8151811062000ade5762000ade62001769565b602002602001015160198190555085600b8151811062000b025762000b0262001769565b6020026020010151601a8190555085600c8151811062000b265762000b2662001769565b6020026020010151601b8190555085600d8151811062000b4a5762000b4a62001769565b6020026020010151601f8190555085600e8151811062000b6e5762000b6e62001769565b602002602001015160078190555085600f8151811062000b925762000b9262001769565b60200260200101516025819055508560108151811062000bb65762000bb662001769565b602002602001015160318190555060078660118151811062000bdc5762000bdc62001769565b6020026020010151111562000c375760405162461bcd60e51b815260206004820152601560248201527f6c656e6774682073686f756c64206265203c3d20370000000000000000000000604482015260640160405180910390fd5b8560118151811062000c4d5762000c4d62001769565b60200260200101516001600160401b0381111562000c6f5762000c6f6200177f565b60405190808252806020026020018201604052801562000c99578160200160208202803683370190505b50805162000cb091602f9160209091019062001156565b50600060308190555b602f5481101562000d60578662000cd2826012620015b3565b8151811062000ce55762000ce562001769565b6020026020010151602f828154811062000d035762000d0362001769565b9060005260206000200181905550602f818154811062000d275762000d2762001769565b90600052602060002001546030600082825462000d459190620015b3565b9091555081905062000d578162001735565b91505062000cb9565b5060265460ff161562000db057603054601b54601a5460195460185462000d889190620015b3565b62000d949190620015b3565b62000da09190620015b3565b62000dac9190620015b3565b602b555b602480546001600160a01b039081166000908152600160205260408082208890559254925192909116917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000e0a9088815260200190565b60405180910390a3600380546001600160a01b039081166000908152600b602090815260408083208054600160ff199182168117909255602480548716865283862080548316841790553080875284872080548416851790553287528487208054841685179055600d865284872080548416851790559754871686528386208054831684179055548616855282852080548216831790558986168552828520805482168317905560225486168552828520805482168317905595845281842080548716821790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a8054871682179055603983527f619fcd35f40c77da8aa64d5f98c1fed669135ecc4f245ce6667721b157f7098f805487168217905561dead9093527f1d5c785bf4a75c155468159eb1b80c7c661f80f2a5187c77fbb176bb2ede4c6b80549095169092179093558254815163313ce56760e01b81529151600a946101009092049093169263313ce567926004808201939291829003018186803b15801562000f9957600080fd5b505afa15801562000fae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fd4919062001540565b62000fe190600a6200163a565b62000fed9190620015ce565b603d556010546040516001600160a01b03909116906200100d9062001193565b6001600160a01b039091168152602001604051809103906000f0801580156200103a573d6000803e3d6000fd5b50601260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050505050505062001795565b8280546200107d90620016f8565b90600052602060002090601f016020900481019282620010a15760008555620010ec565b82601f10620010bc57805160ff1916838001178555620010ec565b82800160010185558215620010ec579182015b82811115620010ec578251825591602001919060010190620010cf565b50620010fa929150620011a1565b5090565b828054828255906000526020600020908101928215620010ec579160200282015b82811115620010ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200111f565b828054828255906000526020600020908101928215620010ec5791602002820182811115620010ec578251825591602001919060010190620010cf565b610156806200682a83390190565b5b80821115620010fa5760008155600101620011a2565b80516001600160a01b0381168114620011d057600080fd5b919050565b600082601f830112620011e757600080fd5b8151602062001200620011fa836200158d565b6200155a565b80838252828201915082860187848660051b89010111156200122157600080fd5b60005b858110156200124b576200123882620011b8565b8452928401929084019060010162001224565b5090979650505050505050565b600082601f8301126200126a57600080fd5b815160206200127d620011fa836200158d565b80838252828201915082860187848660051b89010111156200129e57600080fd5b60005b858110156200124b57620012b5826200132f565b84529284019290840190600101620012a1565b600082601f830112620012da57600080fd5b81516020620012ed620011fa836200158d565b80838252828201915082860187848660051b89010111156200130e57600080fd5b60005b858110156200124b5781518452928401929084019060010162001311565b80518015158114620011d057600080fd5b6000602082840312156200135357600080fd5b6200135e82620011b8565b9392505050565b600080600080608085870312156200137c57600080fd5b84516001600160401b03808211156200139457600080fd5b818701915087601f830112620013a957600080fd5b8151620013ba620011fa826200158d565b80828252602082019150602085018b60208560051b8801011115620013de57600080fd5b60005b84811015620014a157815186811115620013fa57600080fd5b8701603f81018e136200140c57600080fd5b6020810151878111156200142457620014246200177f565b62001439601f8201601f19166020016200155a565b8181528f60408385010111156200144f57600080fd5b60005b828110156200147557604081850101516020828401015260208101905062001452565b8281111562001488576000602084840101525b50865250506020938401939190910190600101620013e1565b505060208a01519098509350505080821115620014bd57600080fd5b620014cb88838901620011d5565b94506040870151915080821115620014e257600080fd5b620014f088838901620012c8565b935060608701519150808211156200150757600080fd5b50620015168782880162001258565b91505092959194509250565b6000602082840312156200153557600080fd5b6200135e826200132f565b6000602082840312156200155357600080fd5b5051919050565b604051601f8201601f191681016001600160401b03811182821017156200158557620015856200177f565b604052919050565b60006001600160401b03821115620015a957620015a96200177f565b5060051b60200190565b60008219821115620015c957620015c962001753565b500190565b600082620015ec57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200163257816000190482111562001616576200161662001753565b808516156200162457918102915b93841c9390800290620015f6565b509250929050565b60006200135e83836000826200165357506001620016f2565b816200166257506000620016f2565b81600181146200167b57600281146200168657620016a6565b6001915050620016f2565b60ff8411156200169a576200169a62001753565b50506001821b620016f2565b5060208310610133831016604e8410600b8410161715620016cb575081810a620016f2565b620016d78383620015f1565b8060001904821115620016ee57620016ee62001753565b0290505b92915050565b600181811c908216806200170d57607f821691505b602082108114156200172f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200174c576200174c62001753565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61508580620017a56000396000f3fe6080604052600436106107455760003560e01c80637abdc1ca116103b1578063b5028e23116101f2578063d285e6ab11610118578063e5a6b10f116100ab578063eb10b7411161007a578063eb10b74114611557578063ef6e4f171461156d578063f2fde38b14611583578063fa3c4947146115a357600080fd5b8063e5a6b10f146114d7578063e5c2b0a6146114f7578063e82bef2914611517578063ea10510e1461153757600080fd5b8063dac1dcfe116100e7578063dac1dcfe1461144b578063dc44b6a014611465578063dd62ed3e1461147b578063e32759cf146114c157600080fd5b8063d285e6ab146113d4578063d5986433146113ea578063d710569b1461140b578063d94378101461142b57600080fd5b8063c18a18d511610190578063c93664891161015f578063c93664891461134d578063ce0192f91461136e578063ce391c9f14611384578063ce4d9f15146113a457600080fd5b8063c18a18d5146112c9578063c213d62d146112df578063c38e5d41146112ff578063c92d567e1461132c57600080fd5b8063be4fe9a5116101cc578063be4fe9a51461125d578063bfac5ee014611273578063bfc3137e14611293578063c0aa931e146112a957600080fd5b8063b5028e23146111ed578063bba30f8f1461120d578063bd25bf291461122d57600080fd5b8063948df714116102d7578063a467810011610275578063aa4bde2811610244578063aa4bde2814611180578063aa582b4214611196578063acb2ad6f146111b6578063b02d757f146111cc57600080fd5b8063a467810014611114578063a6625fb61461112a578063a842486114611140578063a9059cbb1461116057600080fd5b8063992db38f116102b1578063992db38f1461109e5780639a0eb2be146110b35780639cc0e3c7146110d3578063a23270d7146110f357600080fd5b8063948df7141461105457806395d89b411461107357806395e366791461108857600080fd5b8063889483af1161034f5780638da5cb5b1161031e5780638da5cb5b14610fe05780638e1e083814610ffe5780638f02bb5b1461101e5780638f6cd17d1461103e57600080fd5b8063889483af14610f7557806388e765ff14610f955780638c2fc7ad14610fab5780638d84917514610fcb57600080fd5b806385dc30041161038b57806385dc300414610f045780638691752414610f245780638718b24f14610f3a57806388790a6814610f5f57600080fd5b80637abdc1ca14610ea95780637db1342c14610ebf5780638322fff214610edf57600080fd5b806335c96089116105865780635c56ca76116104ac5780636791c39b1161043f57806370a082311161040e57806370a0823114610e34578063715018a614610e545780637959473614610e6957806379dc880c14610e8957600080fd5b80636791c39b14610daf57806369768b5014610dcf578063697cfc1914610de957806369da132614610dfe57600080fd5b80636108a3db1161047b5780636108a3db14610d43578063621823e614610d635780636402511e14610d7957806365e9c76514610d9957600080fd5b80635c56ca7614610ccd5780635efff6f314610ced578063605324f214610d0357806360bca4b214610d2357600080fd5b80634188bf5a116105245780634d5ce038116104f35780634d5ce03814610c56578063553193ca14610c7657806358c3dd2b14610c8c5780635a7ba73c14610cac57600080fd5b80634188bf5a14610beb5780634482004e14610c0b578063474b46d814610c215780634a9a774014610c3657600080fd5b80633bfe62ca116105605780633bfe62ca14610b485780633c11100d14610b5e5780633ccfdbcd14610b8e57806340aa81fe14610bbb57600080fd5b806335c9608914610af15780633b1cd18714610b125780633bb82eb614610b2857600080fd5b8063150e4c471161066b57806318d128551161060957806323b872dd116105d857806323b872dd14610a915780632dab693f14610ab157806330509bca14610ac7578063313ce56714610adc57600080fd5b806318d1285514610a045780631dbbaebd14610a19578063206c17bb14610a395780632171dcc914610a7157600080fd5b8063172246fc11610645578063172246fc1461099e57806317417bb8146109b857806318160ddd146109ce5780631846a5a4146109e357600080fd5b8063150e4c471461094e57806315d07d821461096e57806316f2f1a81461098857600080fd5b8063063be69e116106e3578063095ea7b3116106b2578063095ea7b3146108d95780630f890b86146108f95780631077e1971461090e57806314a432c91461092e57600080fd5b8063063be69e1461085e57806306fdde031461087357806307313d8d1461089557806307c3adf0146108b557600080fd5b806301986fad1161071f57806301986fad146107cd57806303da2b23146107fd57806305833c2b1461081e578063060e304e1461083e57600080fd5b806301339c211461075157806301873d8f14610768578063018fc422146107ad57600080fd5b3661074c57005b600080fd5b34801561075d57600080fd5b506107666115c3565b005b34801561077457600080fd5b50610798610783366004614b42565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107b957600080fd5b506107986107c8366004614b42565b6115fc565b3480156107d957600080fd5b506107986107e8366004614b42565b600b6020526000908152604090205460ff1681565b34801561080957600080fd5b5060225461079890600160c01b900460ff1681565b34801561082a57600080fd5b50610766610839366004614be0565b61162d565b34801561084a57600080fd5b50610766610859366004614d89565b611682565b34801561086a57600080fd5b506107666116b1565b34801561087f57600080fd5b506108886116ea565b6040516107a49190614de9565b3480156108a157600080fd5b506107666108b0366004614d0a565b61177c565b3480156108c157600080fd5b506108cb60165481565b6040519081526020016107a4565b3480156108e557600080fd5b506107986108f4366004614c0e565b6117c4565b34801561090557600080fd5b506107666117da565b34801561091a57600080fd5b50610766610929366004614d89565b611813565b34801561093a57600080fd5b50610766610949366004614d89565b611842565b34801561095a57600080fd5b50610766610969366004614cbe565b611871565b34801561097a57600080fd5b506020546107989060ff1681565b34801561099457600080fd5b506108cb60175481565b3480156109aa57600080fd5b50601e546107989060ff1681565b3480156109c457600080fd5b506108cb601f5481565b3480156109da57600080fd5b50600e546108cb565b3480156109ef57600080fd5b5060245461079890600160a81b900460ff1681565b348015610a1057600080fd5b50610766611912565b348015610a2557600080fd5b50610766610a34366004614c7c565b611943565b348015610a4557600080fd5b50600f54610a59906001600160a01b031681565b6040516001600160a01b0390911681526020016107a4565b348015610a7d57600080fd5b50610766610a8c366004614be0565b611a76565b348015610a9d57600080fd5b50610798610aac366004614b9f565b611acb565b348015610abd57600080fd5b506108cb60075481565b348015610ad357600080fd5b50610766611b62565b348015610ae857600080fd5b506006546108cb565b348015610afd57600080fd5b5060245461079890600160a01b900460ff1681565b348015610b1e57600080fd5b506108cb602c5481565b348015610b3457600080fd5b50610766610b43366004614d89565b611b9e565b348015610b5457600080fd5b506108cb60185481565b348015610b6a57600080fd5b50610798610b79366004614b42565b60116020526000908152604090205460ff1681565b348015610b9a57600080fd5b506108cb610ba9366004614b42565b601c6020526000908152604090205481565b348015610bc757600080fd5b50610798610bd6366004614b42565b600d6020526000908152604090205460ff1681565b348015610bf757600080fd5b50602254610a59906001600160a01b031681565b348015610c1757600080fd5b506108cb60365481565b348015610c2d57600080fd5b50602f546108cb565b348015610c4257600080fd5b50601354610a59906001600160a01b031681565b348015610c6257600080fd5b506108cb610c71366004614b42565b611bcd565b348015610c8257600080fd5b506108cb60215481565b348015610c9857600080fd5b506108cb610ca7366004614d89565b611c03565b348015610cb857600080fd5b5060225461079890600160a81b900460ff1681565b348015610cd957600080fd5b50610766610ce8366004614d0a565b611c24565b348015610cf957600080fd5b506108cb60335481565b348015610d0f57600080fd5b50610766610d1e366004614d89565b611c6c565b348015610d2f57600080fd5b50610766610d3e366004614d89565b611cf3565b348015610d4f57600080fd5b50610766610d5e366004614cbe565b611d22565b348015610d6f57600080fd5b506108cb603f5481565b348015610d8557600080fd5b50610766610d94366004614d89565b611dbb565b348015610da557600080fd5b506108cb60305481565b348015610dbb57600080fd5b50610766610dca366004614d89565b611dea565b348015610ddb57600080fd5b50600a546107989060ff1681565b348015610df557600080fd5b50610766611e19565b348015610e0a57600080fd5b50610a59610e19366004614b42565b602e602052600090815260409020546001600160a01b031681565b348015610e4057600080fd5b506108cb610e4f366004614b42565b611e52565b348015610e6057600080fd5b50610766611f01565b348015610e7557600080fd5b50610766610e84366004614d0a565b611f75565b348015610e9557600080fd5b50610766610ea4366004614d89565b611fea565b348015610eb557600080fd5b506108cb601b5481565b348015610ecb57600080fd5b50610766610eda366004614d89565b612019565b348015610eeb57600080fd5b50602054610a599061010090046001600160a01b031681565b348015610f1057600080fd5b50610766610f1f366004614b42565b612048565b348015610f3057600080fd5b506108cb60285481565b348015610f4657600080fd5b50601254610a599061010090046001600160a01b031681565b348015610f6b57600080fd5b506108cb60195481565b348015610f8157600080fd5b50610766610f90366004614d89565b6120ac565b348015610fa157600080fd5b506108cb60085481565b348015610fb757600080fd5b50610766610fc6366004614be0565b6120db565b348015610fd757600080fd5b50610766612130565b348015610fec57600080fd5b506000546001600160a01b0316610a59565b34801561100a57600080fd5b50603554610a59906001600160a01b031681565b34801561102a57600080fd5b50610766611039366004614d89565b612166565b34801561104a57600080fd5b506108cb60275481565b34801561106057600080fd5b5060265461079890610100900460ff1681565b34801561107f57600080fd5b50610888612195565b34801561109457600080fd5b506108cb601d5481565b3480156110aa57600080fd5b506107666121a4565b3480156110bf57600080fd5b506107666110ce366004614b66565b6121d4565b3480156110df57600080fd5b50610a596110ee366004614d89565b61222c565b3480156110ff57600080fd5b5060225461079890600160b81b900460ff1681565b34801561112057600080fd5b506108cb60315481565b34801561113657600080fd5b506108cb603a5481565b34801561114c57600080fd5b5061076661115b366004614be0565b612256565b34801561116c57600080fd5b5061079861117b366004614c0e565b6122ab565b34801561118c57600080fd5b506108cb60095481565b3480156111a257600080fd5b506107666111b1366004614c7c565b6122b8565b3480156111c257600080fd5b506108cb602b5481565b3480156111d857600080fd5b5060225461079890600160b01b900460ff1681565b3480156111f957600080fd5b50610766611208366004614c7c565b6123de565b34801561121957600080fd5b50610766611228366004614d89565b612542565b34801561123957600080fd5b50610798611248366004614b42565b600c6020526000908152604090205460ff1681565b34801561126957600080fd5b506108cb601a5481565b34801561127f57600080fd5b5061076661128e366004614c3a565b612571565b34801561129f57600080fd5b506108cb602d5481565b3480156112b557600080fd5b506107666112c4366004614d89565b61264c565b3480156112d557600080fd5b506108cb603b5481565b3480156112eb57600080fd5b506107666112fa366004614d89565b61267b565b34801561130b57600080fd5b506108cb61131a366004614b42565b60326020526000908152604090205481565b34801561133857600080fd5b5060225461079890600160a01b900460ff1681565b34801561135957600080fd5b5060225461079890600160d01b900460ff1681565b34801561137a57600080fd5b506108cb60145481565b34801561139057600080fd5b50602454610a59906001600160a01b031681565b3480156113b057600080fd5b506113b96126aa565b604080519384526020840192909252908201526060016107a4565b3480156113e057600080fd5b506108cb602a5481565b3480156113f657600080fd5b5060225461079890600160c81b900460ff1681565b34801561141757600080fd5b50610766611426366004614b42565b6127fc565b34801561143757600080fd5b506108cb611446366004614b42565b612848565b34801561145757600080fd5b506026546107989060ff1681565b34801561147157600080fd5b506108cb60155481565b34801561148757600080fd5b506108cb611496366004614b66565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156114cd57600080fd5b506108cb60255481565b3480156114e357600080fd5b50601054610a59906001600160a01b031681565b34801561150357600080fd5b50610766611512366004614d89565b612a8d565b34801561152357600080fd5b50600354610a59906001600160a01b031681565b34801561154357600080fd5b50610766611552366004614d0a565b612abc565b34801561156357600080fd5b506108cb603d5481565b34801561157957600080fd5b506108cb60345481565b34801561158f57600080fd5b5061076661159e366004614b42565b612b04565b3480156115af57600080fd5b506026546107989062010000900460ff1681565b6000546001600160a01b031633146115f65760405162461bcd60e51b81526004016115ed90614e3e565b60405180910390fd5b43602155565b6033546001600160a01b0382166000908152603260205260408120549091906116259043614f7d565b101592915050565b6000546001600160a01b031633146116575760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152603960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116ac5760405162461bcd60e51b81526004016115ed90614e3e565b602755565b6000546001600160a01b031633146116db5760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60b81b19169055565b6060600480546116f990614f94565b80601f016020809104026020016040519081016040528092919081815260200182805461172590614f94565b80156117725780601f1061174757610100808354040283529160200191611772565b820191906000526020600020905b81548152906001019060200180831161175557829003601f168201915b5050505050905090565b6000546001600160a01b031633146117a65760405162461bcd60e51b81526004016115ed90614e3e565b60248054911515600160a81b0260ff60a81b19909216919091179055565b60006117d1338484612bca565b50600192915050565b6000546001600160a01b031633146118045760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60c81b19169055565b6000546001600160a01b0316331461183d5760405162461bcd60e51b81526004016115ed90614e3e565b603155565b6000546001600160a01b0316331461186c5760405162461bcd60e51b81526004016115ed90614e3e565b600755565b6000546001600160a01b0316331461189b5760405162461bcd60e51b81526004016115ed90614e3e565b60005b8281101561190c5781600b60008686858181106118bd576118bd615000565b90506020020160208101906118d29190614b42565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061190481614fcf565b91505061189e565b50505050565b6000546001600160a01b0316331461193c5760405162461bcd60e51b81526004016115ed90614e3e565b6000603655565b6000546001600160a01b0316331461196d5760405162461bcd60e51b81526004016115ed90614e3e565b60005b81811015611a71576022546000906001600160a01b03166370a0823185858581811061199e5761199e615000565b90506020020160208101906119b39190614b42565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156119f257600080fd5b505afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a9190614da2565b1115611a5f57611a5f838383818110611a4557611a45615000565b9050602002016020810190611a5a9190614b42565b612c2c565b80611a6981614fcf565b915050611970565b505050565b6000546001600160a01b03163314611aa05760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000611ad8848484612cfb565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611b58576001600160a01b0384166000908152600260209081526040808320338452909152902054611b33908390614f7d565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611b9b573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611bc85760405162461bcd60e51b81526004016115ed90614e3e565b603f55565b6001600160a01b0381166000908152600c602052604081205460ff1615611bf657506001919050565b506000919050565b919050565b602f8181548110611c1357600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314611c4e5760405162461bcd60e51b81526004016115ed90614e3e565b60228054911515600160d01b0260ff60d01b19909216919091179055565b6000546001600160a01b03163314611c965760405162461bcd60e51b81526004016115ed90614e3e565b62030d408110158015611cac5750621e84808111155b611cee5760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b60448201526064016115ed565b602a55565b6000546001600160a01b03163314611d1d5760405162461bcd60e51b81526004016115ed90614e3e565b603a55565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b81526004016115ed90614e3e565b60005b8281101561190c5781600c6000868685818110611d6e57611d6e615000565b9050602002016020810190611d839190614b42565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611db481614fcf565b9050611d4f565b6000546001600160a01b03163314611de55760405162461bcd60e51b81526004016115ed90614e3e565b602855565b6000546001600160a01b03163314611e145760405162461bcd60e51b81526004016115ed90614e3e565b603b55565b6000546001600160a01b03163314611e435760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60c01b19169055565b6022546000906001600160a01b038381169116148015611e7c57506022546001600160a01b031633145b8015611e915750602454600160a01b900460ff165b15611ee5576022546001600160a01b0316600090815260016020526040902054611ee55760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b60448201526064016115ed565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611f2b5760405162461bcd60e51b81526004016115ed90614e3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f9f5760405162461bcd60e51b81526004016115ed90614e3e565b8015611fe257603054601b54601a54601954601854611fbe9190614f24565b611fc89190614f24565b611fd29190614f24565b611fdc9190614f24565b602b5550565b6000602b5550565b6000546001600160a01b031633146120145760405162461bcd60e51b81526004016115ed90614e3e565b602c55565b6000546001600160a01b031633146120435760405162461bcd60e51b81526004016115ed90614e3e565b600955565b6000546001600160a01b031633146120725760405162461bcd60e51b81526004016115ed90614e3e565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146120d65760405162461bcd60e51b81526004016115ed90614e3e565b603355565b6000546001600160a01b031633146121055760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461215a5760405162461bcd60e51b81526004016115ed90614e3e565b601e805460ff19169055565b6000546001600160a01b031633146121905760405162461bcd60e51b81526004016115ed90614e3e565b602b55565b6060600580546116f990614f94565b6000546001600160a01b031633146121ce5760405162461bcd60e51b81526004016115ed90614e3e565b43603655565b6000546001600160a01b031633146121fe5760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b039182166000908152602e6020526040902080546001600160a01b03191691909216179055565b6023818154811061223c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146122805760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b60006117d1338484612cfb565b6000546001600160a01b031633146122e25760405162461bcd60e51b81526004016115ed90614e3e565b818160008181106122f5576122f5615000565b6020029190910135601455508181600181811061231457612314615000565b6020029190910135601555508181600281811061233357612333615000565b6020029190910135601655508181600381811061235257612352615000565b6020029190910135601755508181600481811061237157612371615000565b6020029190910135601855508181600581811061239057612390615000565b602002919091013560195550818160068181106123af576123af615000565b6020029190910135601a5550818160078181106123ce576123ce615000565b6020029190910135601b55505050565b6000546001600160a01b031633146124085760405162461bcd60e51b81526004016115ed90614e3e565b60078111156124595760405162461bcd60e51b815260206004820152601760248201527f6c656e6774682073686f756c64206265203c3d2037202100000000000000000060448201526064016115ed565b8067ffffffffffffffff81111561247257612472615016565b60405190808252806020026020018201604052801561249b578160200160208202803683370190505b5080516124b091602f91602090910190614a7f565b50600060308190555b81811015611a71578282828181106124d3576124d3615000565b90506020020135602f82815481106124ed576124ed615000565b9060005260206000200181905550602f818154811061250e5761250e615000565b90600052602060002001546030600082825461252a9190614f24565b9091555081905061253a81614fcf565b9150506124b9565b6000546001600160a01b0316331461256c5760405162461bcd60e51b81526004016115ed90614e3e565b602d55565b6000546001600160a01b031633148061259457506003546001600160a01b031633145b6125ca5760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b60448201526064016115ed565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b15801561261457600080fd5b505af1158015612628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190c9190614d27565b6000546001600160a01b031633146126765760405162461bcd60e51b81526004016115ed90614e3e565b600855565b6000546001600160a01b031633146126a55760405162461bcd60e51b81526004016115ed90614e3e565b603d55565b600080600080602260009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561270457600080fd5b505afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614d44565b506010546001600160701b039283169450911691506001600160a01b03163081101561276d57829650819550612774565b8196508295505b6022546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a082319060240160206040518083038186803b1580156127b957600080fd5b505afa1580156127cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f19190614da2565b945050505050909192565b6000546001600160a01b031633146128265760405162461bcd60e51b81526004016115ed90614e3e565b603580546001600160a01b0319166001600160a01b0392909216919091179055565b60225460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190614d44565b506010546001600160701b039283169450911691506001600160a01b03166000308210156128fb5750816128fe565b50825b846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561293757600080fd5b505afa15801561294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296f9190614da2565b15612a8057846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ad57600080fd5b505afa1580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190614da2565b6040516370a0823160e01b81526001600160a01b0389811660048301528391908816906370a082319060240160206040518083038186803b158015612a2957600080fd5b505afa158015612a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a619190614da2565b612a6b9190614f5e565b612a759190614f3c565b979650505050505050565b5060009695505050505050565b6000546001600160a01b03163314612ab75760405162461bcd60e51b81526004016115ed90614e3e565b602555565b6000546001600160a01b03163314612ae65760405162461bcd60e51b81526004016115ed90614e3e565b60248054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314612b2e5760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b038116612b6f5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b60448201526064016115ed565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015612c38575050565b6001600160a01b038216600090815260386020526040902054612cf7576037541580612c955750816001600160a01b03166037600081548110612c7d57612c7d615000565b6000918252602090912001546001600160a01b031614155b15612cf757603780546001600160a01b0384166000818152603860205260408120839055600183018455929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0180546001600160a01b03191690911790555b5050565b6001600160a01b03831660009081526001602052604090205481811015612d575760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b60448201526064016115ed565b6000612d6285611bcd565b1115612da15760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b60448201526064016115ed565b60125460ff1615612dbe57612db7848484613456565b5050505050565b60225460009081908190819081906001600160a01b038981169116148015612df557503360009081526029602052604090205460ff165b8015612e095750326001600160a01b038a16145b15612e4057612e178761350b565b8015612e28575063ffffffff893b16155b15612e4057506026805461ff00191661010017905560015b6022546000906001600160a01b038b811691161415612e8057612e6288613527565b90508015612e80576026805462ff0000191662010000179055600192505b6001600160a01b038a166000908152600b602052604090205460ff16158015612ec257506001600160a01b0389166000908152600b602052604090205460ff16155b8015612ed75750602454600160a81b900460ff165b8015612ee557506000602554115b8015612f2b57506001600160a01b038a1660009081526011602052604090205460ff1680612f2b57506001600160a01b03891660009081526011602052604090205460ff165b15612faf576000805b602554811015612f925760408051602081018390529081018b90524260608201526080016040516020818303038152906040528051906020012060001c9150612f7f8c836001613456565b5080612f8a81614fcf565b915050612f34565b50602554612fa1906001614f5e565b612fab908a614f7d565b9850505b602154158015612fc85750602254600160a01b900460ff165b156130a7576001600160a01b038a166000908152600b602052604090205460ff1615801561300f57506001600160a01b0389166000908152600b602052604090205460ff16155b801561303457506001600160a01b038a1660009081526011602052604090205460ff16155b801561305957506001600160a01b03891660009081526011602052604090205460ff16155b156130a757883b63ffffffff16156130a75760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b60448201526064016115ed565b6001600160a01b038a1660009081526011602052604090205460ff16806130e657506001600160a01b03891660009081526011602052604090205460ff165b156133d0576001600160a01b038a166000908152600b602052604090205460ff1615801561312d57506001600160a01b0389166000908152600b602052604090205460ff16155b156133aa57602254600160a01b900460ff1615613197576021541515808061315f5750603654600010801561315f5750825b6131955760405162461bcd60e51b815260206004820152600760248201526670617573696e6760c81b60448201526064016115ed565b505b602254600160a01b900460ff1680156131b95750602254600160a81b900460ff165b80156131d357506007546021546131d09190614f24565b43105b80156131f857506001600160a01b03891660009081526011602052604090205460ff16155b15613221576001600160a01b0389166000908152600c60205260409020805460ff191660011790555b601e5460ff16801561324b57506001600160a01b038a1660009081526011602052604090205460ff165b80156132655750601f546021546132629190614f24565b43105b156132c357326000908152601c6020526040902054431461329757326000908152601c602052604090204390556132c3565b601d80549060006132a783614fcf565b91905055506132b78a8a8a613605565b50505050505050505050565b6001600160a01b03891660009081526011602052604090205460ff16156133945760125460ff161580156132f5575081155b156133945730600090815260016020526040902054602854811115613392576000601954601a546018546015546016546014546133329190614f24565b61333c9190614f24565b6133469190614f24565b6133509190614f24565b61335a9190614f24565b9050600060646027548461336e9190614f5e565b6133789190614f3c565b9050828111156133855750815b61338f818361368b565b50505b505b811580156133a0575082155b156133aa57600195505b6001600160a01b03891660009081526011602052604090205460ff16156133d057600194505b6001600160a01b038a1660009081526011602052604090205460ff1615801561341257506001600160a01b03891660009081526011602052604090205460ff16155b1561341c57600193505b61342c8a8a8a898989888a613d62565b6001600160a01b038a1630146132b757841561344b5761344b8a612c2c565b6132b7602a546145b7565b6001600160a01b038316600090815260016020526040812080548391908390613480908490614f7d565b90915550506001600160a01b038316600090815260016020526040812080548492906134ad908490614f24565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134f991815260200190565b60405180910390a35060019392505050565b6000806000806135196126aa565b919091119695505050505050565b60008060006135346126aa565b92505091508181116135fe576022548490613557906001600160a01b0316611e52565b6135619190614f7d565b602260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135af57600080fd5b505afa1580156135c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e79190614da2565b6135f19086614f5e565b6135fb9190614f3c565b92505b5050919050565b6001600160a01b038316600090815260016020526040902054613629908290614f7d565b6001600160a01b038416600090815260016020526040812091909155606461365283605a614f5e565b61365c9190614f3c565b6003549091506136779085906001600160a01b031683614a07565b61190c84846136868486614f7d565b614a07565b6012805460ff191660011790558015806136a3575081155b156136ad57613d54565b60006015546019546136bf9190614f24565b905060008260026136d08487614f5e565b6136da9190614f3c565b6136e49190614f3c565b905060006136f3600284614f3c565b6136fd9085614f7d565b6010546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061374557613745615000565b6001600160a01b03928316602091820292909201015260105482519116908290600190811061377657613776615000565b6001600160a01b039283166020918202929092010152600f5416635c11d79561379f868a614f7d565b60125460405160e084901b6001600160e01b03191681526137d99291600091879161010090046001600160a01b0316904290600401614e5e565b600060405180830381600087803b1580156137f357600080fd5b505af1925050508015613804575060015b61383d57604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6012546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a082319060240160206040518083038186803b15801561388957600080fd5b505afa15801561389d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c19190614da2565b9050801561395c576012546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401602060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395a9190614d27565b505b600084600261396b8985614f5e565b6139759190614f3c565b61397f9190614f3c565b90506000856018546014546139949190614f24565b61399e9085614f5e565b6139a89190614f3c565b90508015613af95760205460ff1615613a5957601054604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015613a0157600080fd5b505af1158015613a15573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015613a53573d6000803e3d6000fd5b50613ae1565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb90604401602060405180830381600087803b158015613aa757600080fd5b505af1158015613abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adf9190614d27565b505b8060346000828254613af39190614f24565b90915550505b600087118015613b095750600082115b15613bf057600f5460105460355460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b158015613b8a57600080fd5b505af1925050508015613bba575060408051601f3d908101601f19168201909252613bb791810190614dbb565b60015b613bec576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a1613bf0565b5050505b601a54601654613c009190614f24565b613c11575050505050505050613d54565b60105460205461010090046001600160a01b0390811691161415613c3c575050505050505050613d54565b600f546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a082319060240160206040518083038186803b158015613c8957600080fd5b505afa158015613c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc19190614da2565b6000602330426040518663ffffffff1660e01b8152600401613ce7959493929190614ecf565b600060405180830381600087803b158015613d0157600080fd5b505af1925050508015613d12575060015b613d4b57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506012805460ff19169055565b6001600160a01b038816600090815260016020526040902054613d86908790614f7d565b6001600160a01b038916600090815260016020526040812091909155851561408557602254600160d01b900460ff1615613f3d576001600160a01b03891660009081526011602052604081205460ff1615613de2575087613de5565b50885b600080805b602f54811015613e3157602f8181548110613e0757613e07615000565b906000526020600020015482613e1d9190614f24565b915080613e2981614fcf565b915050613dea565b506000612710613e41838d614f5e565b613e4b9190614f3c565b90508115613f385760005b602f54811015613f36576001600160a01b038086166000908152602e60205260409020541680613e9257506003546001600160a01b0316613ed7565b613e9b866115fc565b613ed757506001600160a01b038086166000908152602e6020908152604080832080546001600160a01b03191690556032909152812055600354165b83602f8381548110613eeb57613eeb615000565b906000526020600020015484613f019190614f5e565b613f0b9190614f3c565b9450613f178588614f24565b9650613f248f8287614a07565b9450613f2f81614fcf565b9050613e56565b505b505050505b60008515613f6957601954601a54601854613f589190614f24565b613f629190614f24565b9050613fe3565b601654601554601454613f7c9190614f24565b613f869190614f24565b602254909150600160b81b900460ff1615613fe357600854881115613fe35760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b60448201526064016115ed565b6000612710613ff2838b614f5e565b613ffc9190614f3c565b9050801561401b5761400e8184614f24565b925061401b8b3083614a07565b600087614044576127106017548b6140339190614f5e565b61403d9190614f3c565b9050614062565b612710601b548b6140559190614f5e565b61405f9190614f3c565b90505b8015614081576140728185614f24565b93506140818c61dead83614a07565b5050505b6001600160a01b03891660009081526011602052604090205460ff161580156140c757506001600160a01b03881660009081526011602052604090205460ff16155b80156140dc5750602254600160d01b900460ff165b15614341576001600160a01b038089166000908152602e60205260409020541615801561412257506001600160a01b0388166000908152600b602052604090205460ff16155b801561414757506031546001600160a01b038916600090815260016020526040902054105b1561429357873b63ffffffff161561419a576040516001600160a01b03891681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de1865579060200160405180910390a1614341565b883b63ffffffff16156141e8576040516001600160a01b038a1681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de1865579060200160405180910390a1614341565b6031546001600160a01b03891660009081526001602052604090205461420e838a614f7d565b6142189190614f24565b1061428e576001600160a01b038881166000818152602e6020908152604080832080546001600160a01b031916958f1695861790556032825291829020439081905591519182529192917fa8c50a298b4200fd02e706cf001585af8f63488dbd1a4e0e676ea02770a2e0f6910160405180910390a35b614341565b6001600160a01b038089166000908152602e602052604090205416158015906142d557506001600160a01b0388166000908152600b602052604090205460ff16155b15614341576142e3886115fc565b614341576001600160a01b0388166000908152602e6020908152604080832080546001600160a01b03191690556032909152808220829055517f10814c3720b764a0a84f9cc9ad88c790d4cde24ec0be99348bf0aa16ec174fde9190a15b83801561436757506001600160a01b0389166000908152600b602052604090205460ff16155b801561438c57506001600160a01b0388166000908152600b602052604090205460ff16155b156143cf576000612710602b54896143a49190614f5e565b6143ae9190614f3c565b905080156143cd576143c08183614f24565b91506143cd8a3083614a07565b505b8280156143f557506001600160a01b0389166000908152600b602052604090205460ff16155b801561441a57506001600160a01b0388166000908152600b602052604090205460ff16155b1561445d576000612710602c54896144329190614f5e565b61443c9190614f3c565b9050801561445b5761444e8183614f24565b915061445b8a3083614a07565b505b81801561448357506001600160a01b0389166000908152600b602052604090205460ff16155b80156144a857506001600160a01b0388166000908152600b602052604090205460ff16155b156144ed576000612710602d54896144c09190614f5e565b6144ca9190614f3c565b905080156144eb576144dc8183614f24565b91506144eb8a61dead83614a07565b505b6001600160a01b0388166000908152600d602052604090205460ff1615801561451f5750602254600160c01b900460ff165b1561459d576009546001600160a01b038916600090815260016020526040902054829061454d908a90614f24565b6145579190614f7d565b111561459d5760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b60448201526064016115ed565b6145ac8989613686848b614f7d565b505050505050505050565b43603f54603e546145c89190614f24565b11156145d15750565b6020546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b15801561461d57600080fd5b505afa158015614631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146559190614da2565b9050603d5481101561466657505050565b602254604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd91600480820192602092909190829003018186803b1580156146b057600080fd5b505afa1580156146c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e89190614da2565b603754909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a082319060240160206040518083038186803b15801561473b57600080fd5b505afa15801561474f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147739190614da2565b99505b8b8310801561478457508382105b156149f55783603c5410614798576000603c555b6037603c54815481106147ad576147ad615000565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a082319060240160206040518083038186803b1580156147ff57600080fd5b505afa158015614813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148379190614da2565b955060008611801561486257506001600160a01b03871660009081526039602052604090205460ff16155b80156148885750603b546001600160a01b03881660009081526001602052604090205410155b156149b35787614898878c614f5e565b6148a29190614f3c565b945060008511801561492a57506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a082319060240160206040518083038186803b1580156148f057600080fd5b505afa158015614904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149289190614da2565b115b156149b35760405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb90604401602060405180830381600087803b15801561497957600080fd5b505af115801561498d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149b19190614d27565b505b5a6149be9082614f7d565b6149c89084614f24565b92505a603c805491925060006149dd83614fcf565b919050555081806149ed90614fcf565b925050614776565b505043603e5550505050505050505050565b6001600160a01b038216600090815260016020526040902054614a2b908290614f24565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c1f9085815260200190565b828054828255906000526020600020908101928215614aba579160200282015b82811115614aba578251825591602001919060010190614a9f565b50614ac6929150614aca565b5090565b5b80821115614ac65760008155600101614acb565b60008083601f840112614af157600080fd5b50813567ffffffffffffffff811115614b0957600080fd5b6020830191508360208260051b8501011115614b2457600080fd5b9250929050565b80516001600160701b0381168114611bfe57600080fd5b600060208284031215614b5457600080fd5b8135614b5f8161502c565b9392505050565b60008060408385031215614b7957600080fd5b8235614b848161502c565b91506020830135614b948161502c565b809150509250929050565b600080600060608486031215614bb457600080fd5b8335614bbf8161502c565b92506020840135614bcf8161502c565b929592945050506040919091013590565b60008060408385031215614bf357600080fd5b8235614bfe8161502c565b91506020830135614b9481615041565b60008060408385031215614c2157600080fd5b8235614c2c8161502c565b946020939093013593505050565b600080600060608486031215614c4f57600080fd5b8335614c5a8161502c565b9250602084013591506040840135614c718161502c565b809150509250925092565b60008060208385031215614c8f57600080fd5b823567ffffffffffffffff811115614ca657600080fd5b614cb285828601614adf565b90969095509350505050565b600080600060408486031215614cd357600080fd5b833567ffffffffffffffff811115614cea57600080fd5b614cf686828701614adf565b9094509250506020840135614c7181615041565b600060208284031215614d1c57600080fd5b8135614b5f81615041565b600060208284031215614d3957600080fd5b8151614b5f81615041565b600080600060608486031215614d5957600080fd5b614d6284614b2b565b9250614d7060208501614b2b565b9150604084015163ffffffff81168114614c7157600080fd5b600060208284031215614d9b57600080fd5b5035919050565b600060208284031215614db457600080fd5b5051919050565b600080600060608486031215614dd057600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015614e1657858101830151858201604001528201614dfa565b81811115614e28576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614eae5784516001600160a01b031683529383019391830191600101614e89565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015614eae5784546001600160a01b031683526001948501949284019201614eff565b60008219821115614f3757614f37614fea565b500190565b600082614f5957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f7857614f78614fea565b500290565b600082821015614f8f57614f8f614fea565b500390565b600181811c90821680614fa857607f821691505b60208210811415614fc957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614fe357614fe3614fea565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b9b57600080fd5b8015158114611b9b57600080fdfea26469706673582212208b8dcdc634c0a0b1144dcbdc216e978dc6ffbd936d0c3888b870e19c4a85bc8064736f6c63430008060033608060405234801561001057600080fd5b5060405161015638038061015683398101604081905261002f916100b7565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b390604401602060405180830381600087803b15801561007857600080fd5b505af115801561008c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b091906100e7565b5050610109565b6000602082840312156100c957600080fd5b81516001600160a01b03811681146100e057600080fd5b9392505050565b6000602082840312156100f957600080fd5b815180151581146100e057600080fd5b603f806101176000396000f3fe6080604052600080fdfea26469706673582212200a3e16821b22a2dd534a7646f4c872173aad6d0230bf32375c3a0ac5aa594ede64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000004e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016416e7420476174686572696e6720416c6c69616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000034147410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000009f024b9492801f7e4cbead8b7d8ed45173628ff00000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000240bde0585cadba3ff76c2e5fbd7ca56a434c52200000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000204fce5e3e2502611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106107455760003560e01c80637abdc1ca116103b1578063b5028e23116101f2578063d285e6ab11610118578063e5a6b10f116100ab578063eb10b7411161007a578063eb10b74114611557578063ef6e4f171461156d578063f2fde38b14611583578063fa3c4947146115a357600080fd5b8063e5a6b10f146114d7578063e5c2b0a6146114f7578063e82bef2914611517578063ea10510e1461153757600080fd5b8063dac1dcfe116100e7578063dac1dcfe1461144b578063dc44b6a014611465578063dd62ed3e1461147b578063e32759cf146114c157600080fd5b8063d285e6ab146113d4578063d5986433146113ea578063d710569b1461140b578063d94378101461142b57600080fd5b8063c18a18d511610190578063c93664891161015f578063c93664891461134d578063ce0192f91461136e578063ce391c9f14611384578063ce4d9f15146113a457600080fd5b8063c18a18d5146112c9578063c213d62d146112df578063c38e5d41146112ff578063c92d567e1461132c57600080fd5b8063be4fe9a5116101cc578063be4fe9a51461125d578063bfac5ee014611273578063bfc3137e14611293578063c0aa931e146112a957600080fd5b8063b5028e23146111ed578063bba30f8f1461120d578063bd25bf291461122d57600080fd5b8063948df714116102d7578063a467810011610275578063aa4bde2811610244578063aa4bde2814611180578063aa582b4214611196578063acb2ad6f146111b6578063b02d757f146111cc57600080fd5b8063a467810014611114578063a6625fb61461112a578063a842486114611140578063a9059cbb1461116057600080fd5b8063992db38f116102b1578063992db38f1461109e5780639a0eb2be146110b35780639cc0e3c7146110d3578063a23270d7146110f357600080fd5b8063948df7141461105457806395d89b411461107357806395e366791461108857600080fd5b8063889483af1161034f5780638da5cb5b1161031e5780638da5cb5b14610fe05780638e1e083814610ffe5780638f02bb5b1461101e5780638f6cd17d1461103e57600080fd5b8063889483af14610f7557806388e765ff14610f955780638c2fc7ad14610fab5780638d84917514610fcb57600080fd5b806385dc30041161038b57806385dc300414610f045780638691752414610f245780638718b24f14610f3a57806388790a6814610f5f57600080fd5b80637abdc1ca14610ea95780637db1342c14610ebf5780638322fff214610edf57600080fd5b806335c96089116105865780635c56ca76116104ac5780636791c39b1161043f57806370a082311161040e57806370a0823114610e34578063715018a614610e545780637959473614610e6957806379dc880c14610e8957600080fd5b80636791c39b14610daf57806369768b5014610dcf578063697cfc1914610de957806369da132614610dfe57600080fd5b80636108a3db1161047b5780636108a3db14610d43578063621823e614610d635780636402511e14610d7957806365e9c76514610d9957600080fd5b80635c56ca7614610ccd5780635efff6f314610ced578063605324f214610d0357806360bca4b214610d2357600080fd5b80634188bf5a116105245780634d5ce038116104f35780634d5ce03814610c56578063553193ca14610c7657806358c3dd2b14610c8c5780635a7ba73c14610cac57600080fd5b80634188bf5a14610beb5780634482004e14610c0b578063474b46d814610c215780634a9a774014610c3657600080fd5b80633bfe62ca116105605780633bfe62ca14610b485780633c11100d14610b5e5780633ccfdbcd14610b8e57806340aa81fe14610bbb57600080fd5b806335c9608914610af15780633b1cd18714610b125780633bb82eb614610b2857600080fd5b8063150e4c471161066b57806318d128551161060957806323b872dd116105d857806323b872dd14610a915780632dab693f14610ab157806330509bca14610ac7578063313ce56714610adc57600080fd5b806318d1285514610a045780631dbbaebd14610a19578063206c17bb14610a395780632171dcc914610a7157600080fd5b8063172246fc11610645578063172246fc1461099e57806317417bb8146109b857806318160ddd146109ce5780631846a5a4146109e357600080fd5b8063150e4c471461094e57806315d07d821461096e57806316f2f1a81461098857600080fd5b8063063be69e116106e3578063095ea7b3116106b2578063095ea7b3146108d95780630f890b86146108f95780631077e1971461090e57806314a432c91461092e57600080fd5b8063063be69e1461085e57806306fdde031461087357806307313d8d1461089557806307c3adf0146108b557600080fd5b806301986fad1161071f57806301986fad146107cd57806303da2b23146107fd57806305833c2b1461081e578063060e304e1461083e57600080fd5b806301339c211461075157806301873d8f14610768578063018fc422146107ad57600080fd5b3661074c57005b600080fd5b34801561075d57600080fd5b506107666115c3565b005b34801561077457600080fd5b50610798610783366004614b42565b60296020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156107b957600080fd5b506107986107c8366004614b42565b6115fc565b3480156107d957600080fd5b506107986107e8366004614b42565b600b6020526000908152604090205460ff1681565b34801561080957600080fd5b5060225461079890600160c01b900460ff1681565b34801561082a57600080fd5b50610766610839366004614be0565b61162d565b34801561084a57600080fd5b50610766610859366004614d89565b611682565b34801561086a57600080fd5b506107666116b1565b34801561087f57600080fd5b506108886116ea565b6040516107a49190614de9565b3480156108a157600080fd5b506107666108b0366004614d0a565b61177c565b3480156108c157600080fd5b506108cb60165481565b6040519081526020016107a4565b3480156108e557600080fd5b506107986108f4366004614c0e565b6117c4565b34801561090557600080fd5b506107666117da565b34801561091a57600080fd5b50610766610929366004614d89565b611813565b34801561093a57600080fd5b50610766610949366004614d89565b611842565b34801561095a57600080fd5b50610766610969366004614cbe565b611871565b34801561097a57600080fd5b506020546107989060ff1681565b34801561099457600080fd5b506108cb60175481565b3480156109aa57600080fd5b50601e546107989060ff1681565b3480156109c457600080fd5b506108cb601f5481565b3480156109da57600080fd5b50600e546108cb565b3480156109ef57600080fd5b5060245461079890600160a81b900460ff1681565b348015610a1057600080fd5b50610766611912565b348015610a2557600080fd5b50610766610a34366004614c7c565b611943565b348015610a4557600080fd5b50600f54610a59906001600160a01b031681565b6040516001600160a01b0390911681526020016107a4565b348015610a7d57600080fd5b50610766610a8c366004614be0565b611a76565b348015610a9d57600080fd5b50610798610aac366004614b9f565b611acb565b348015610abd57600080fd5b506108cb60075481565b348015610ad357600080fd5b50610766611b62565b348015610ae857600080fd5b506006546108cb565b348015610afd57600080fd5b5060245461079890600160a01b900460ff1681565b348015610b1e57600080fd5b506108cb602c5481565b348015610b3457600080fd5b50610766610b43366004614d89565b611b9e565b348015610b5457600080fd5b506108cb60185481565b348015610b6a57600080fd5b50610798610b79366004614b42565b60116020526000908152604090205460ff1681565b348015610b9a57600080fd5b506108cb610ba9366004614b42565b601c6020526000908152604090205481565b348015610bc757600080fd5b50610798610bd6366004614b42565b600d6020526000908152604090205460ff1681565b348015610bf757600080fd5b50602254610a59906001600160a01b031681565b348015610c1757600080fd5b506108cb60365481565b348015610c2d57600080fd5b50602f546108cb565b348015610c4257600080fd5b50601354610a59906001600160a01b031681565b348015610c6257600080fd5b506108cb610c71366004614b42565b611bcd565b348015610c8257600080fd5b506108cb60215481565b348015610c9857600080fd5b506108cb610ca7366004614d89565b611c03565b348015610cb857600080fd5b5060225461079890600160a81b900460ff1681565b348015610cd957600080fd5b50610766610ce8366004614d0a565b611c24565b348015610cf957600080fd5b506108cb60335481565b348015610d0f57600080fd5b50610766610d1e366004614d89565b611c6c565b348015610d2f57600080fd5b50610766610d3e366004614d89565b611cf3565b348015610d4f57600080fd5b50610766610d5e366004614cbe565b611d22565b348015610d6f57600080fd5b506108cb603f5481565b348015610d8557600080fd5b50610766610d94366004614d89565b611dbb565b348015610da557600080fd5b506108cb60305481565b348015610dbb57600080fd5b50610766610dca366004614d89565b611dea565b348015610ddb57600080fd5b50600a546107989060ff1681565b348015610df557600080fd5b50610766611e19565b348015610e0a57600080fd5b50610a59610e19366004614b42565b602e602052600090815260409020546001600160a01b031681565b348015610e4057600080fd5b506108cb610e4f366004614b42565b611e52565b348015610e6057600080fd5b50610766611f01565b348015610e7557600080fd5b50610766610e84366004614d0a565b611f75565b348015610e9557600080fd5b50610766610ea4366004614d89565b611fea565b348015610eb557600080fd5b506108cb601b5481565b348015610ecb57600080fd5b50610766610eda366004614d89565b612019565b348015610eeb57600080fd5b50602054610a599061010090046001600160a01b031681565b348015610f1057600080fd5b50610766610f1f366004614b42565b612048565b348015610f3057600080fd5b506108cb60285481565b348015610f4657600080fd5b50601254610a599061010090046001600160a01b031681565b348015610f6b57600080fd5b506108cb60195481565b348015610f8157600080fd5b50610766610f90366004614d89565b6120ac565b348015610fa157600080fd5b506108cb60085481565b348015610fb757600080fd5b50610766610fc6366004614be0565b6120db565b348015610fd757600080fd5b50610766612130565b348015610fec57600080fd5b506000546001600160a01b0316610a59565b34801561100a57600080fd5b50603554610a59906001600160a01b031681565b34801561102a57600080fd5b50610766611039366004614d89565b612166565b34801561104a57600080fd5b506108cb60275481565b34801561106057600080fd5b5060265461079890610100900460ff1681565b34801561107f57600080fd5b50610888612195565b34801561109457600080fd5b506108cb601d5481565b3480156110aa57600080fd5b506107666121a4565b3480156110bf57600080fd5b506107666110ce366004614b66565b6121d4565b3480156110df57600080fd5b50610a596110ee366004614d89565b61222c565b3480156110ff57600080fd5b5060225461079890600160b81b900460ff1681565b34801561112057600080fd5b506108cb60315481565b34801561113657600080fd5b506108cb603a5481565b34801561114c57600080fd5b5061076661115b366004614be0565b612256565b34801561116c57600080fd5b5061079861117b366004614c0e565b6122ab565b34801561118c57600080fd5b506108cb60095481565b3480156111a257600080fd5b506107666111b1366004614c7c565b6122b8565b3480156111c257600080fd5b506108cb602b5481565b3480156111d857600080fd5b5060225461079890600160b01b900460ff1681565b3480156111f957600080fd5b50610766611208366004614c7c565b6123de565b34801561121957600080fd5b50610766611228366004614d89565b612542565b34801561123957600080fd5b50610798611248366004614b42565b600c6020526000908152604090205460ff1681565b34801561126957600080fd5b506108cb601a5481565b34801561127f57600080fd5b5061076661128e366004614c3a565b612571565b34801561129f57600080fd5b506108cb602d5481565b3480156112b557600080fd5b506107666112c4366004614d89565b61264c565b3480156112d557600080fd5b506108cb603b5481565b3480156112eb57600080fd5b506107666112fa366004614d89565b61267b565b34801561130b57600080fd5b506108cb61131a366004614b42565b60326020526000908152604090205481565b34801561133857600080fd5b5060225461079890600160a01b900460ff1681565b34801561135957600080fd5b5060225461079890600160d01b900460ff1681565b34801561137a57600080fd5b506108cb60145481565b34801561139057600080fd5b50602454610a59906001600160a01b031681565b3480156113b057600080fd5b506113b96126aa565b604080519384526020840192909252908201526060016107a4565b3480156113e057600080fd5b506108cb602a5481565b3480156113f657600080fd5b5060225461079890600160c81b900460ff1681565b34801561141757600080fd5b50610766611426366004614b42565b6127fc565b34801561143757600080fd5b506108cb611446366004614b42565b612848565b34801561145757600080fd5b506026546107989060ff1681565b34801561147157600080fd5b506108cb60155481565b34801561148757600080fd5b506108cb611496366004614b66565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156114cd57600080fd5b506108cb60255481565b3480156114e357600080fd5b50601054610a59906001600160a01b031681565b34801561150357600080fd5b50610766611512366004614d89565b612a8d565b34801561152357600080fd5b50600354610a59906001600160a01b031681565b34801561154357600080fd5b50610766611552366004614d0a565b612abc565b34801561156357600080fd5b506108cb603d5481565b34801561157957600080fd5b506108cb60345481565b34801561158f57600080fd5b5061076661159e366004614b42565b612b04565b3480156115af57600080fd5b506026546107989062010000900460ff1681565b6000546001600160a01b031633146115f65760405162461bcd60e51b81526004016115ed90614e3e565b60405180910390fd5b43602155565b6033546001600160a01b0382166000908152603260205260408120549091906116259043614f7d565b101592915050565b6000546001600160a01b031633146116575760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152603960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116ac5760405162461bcd60e51b81526004016115ed90614e3e565b602755565b6000546001600160a01b031633146116db5760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60b81b19169055565b6060600480546116f990614f94565b80601f016020809104026020016040519081016040528092919081815260200182805461172590614f94565b80156117725780601f1061174757610100808354040283529160200191611772565b820191906000526020600020905b81548152906001019060200180831161175557829003601f168201915b5050505050905090565b6000546001600160a01b031633146117a65760405162461bcd60e51b81526004016115ed90614e3e565b60248054911515600160a81b0260ff60a81b19909216919091179055565b60006117d1338484612bca565b50600192915050565b6000546001600160a01b031633146118045760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60c81b19169055565b6000546001600160a01b0316331461183d5760405162461bcd60e51b81526004016115ed90614e3e565b603155565b6000546001600160a01b0316331461186c5760405162461bcd60e51b81526004016115ed90614e3e565b600755565b6000546001600160a01b0316331461189b5760405162461bcd60e51b81526004016115ed90614e3e565b60005b8281101561190c5781600b60008686858181106118bd576118bd615000565b90506020020160208101906118d29190614b42565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061190481614fcf565b91505061189e565b50505050565b6000546001600160a01b0316331461193c5760405162461bcd60e51b81526004016115ed90614e3e565b6000603655565b6000546001600160a01b0316331461196d5760405162461bcd60e51b81526004016115ed90614e3e565b60005b81811015611a71576022546000906001600160a01b03166370a0823185858581811061199e5761199e615000565b90506020020160208101906119b39190614b42565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156119f257600080fd5b505afa158015611a06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2a9190614da2565b1115611a5f57611a5f838383818110611a4557611a45615000565b9050602002016020810190611a5a9190614b42565b612c2c565b80611a6981614fcf565b915050611970565b505050565b6000546001600160a01b03163314611aa05760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152602960205260409020805460ff1916911515919091179055565b6000611ad8848484612cfb565b6001600160a01b038416600090815260026020908152604080832033845290915290205460001914611b58576001600160a01b0384166000908152600260209081526040808320338452909152902054611b33908390614f7d565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611b9b573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611bc85760405162461bcd60e51b81526004016115ed90614e3e565b603f55565b6001600160a01b0381166000908152600c602052604081205460ff1615611bf657506001919050565b506000919050565b919050565b602f8181548110611c1357600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314611c4e5760405162461bcd60e51b81526004016115ed90614e3e565b60228054911515600160d01b0260ff60d01b19909216919091179055565b6000546001600160a01b03163314611c965760405162461bcd60e51b81526004016115ed90614e3e565b62030d408110158015611cac5750621e84808111155b611cee5760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b60448201526064016115ed565b602a55565b6000546001600160a01b03163314611d1d5760405162461bcd60e51b81526004016115ed90614e3e565b603a55565b6000546001600160a01b03163314611d4c5760405162461bcd60e51b81526004016115ed90614e3e565b60005b8281101561190c5781600c6000868685818110611d6e57611d6e615000565b9050602002016020810190611d839190614b42565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611db481614fcf565b9050611d4f565b6000546001600160a01b03163314611de55760405162461bcd60e51b81526004016115ed90614e3e565b602855565b6000546001600160a01b03163314611e145760405162461bcd60e51b81526004016115ed90614e3e565b603b55565b6000546001600160a01b03163314611e435760405162461bcd60e51b81526004016115ed90614e3e565b6022805460ff60c01b19169055565b6022546000906001600160a01b038381169116148015611e7c57506022546001600160a01b031633145b8015611e915750602454600160a01b900460ff165b15611ee5576022546001600160a01b0316600090815260016020526040902054611ee55760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b60448201526064016115ed565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611f2b5760405162461bcd60e51b81526004016115ed90614e3e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f9f5760405162461bcd60e51b81526004016115ed90614e3e565b8015611fe257603054601b54601a54601954601854611fbe9190614f24565b611fc89190614f24565b611fd29190614f24565b611fdc9190614f24565b602b5550565b6000602b5550565b6000546001600160a01b031633146120145760405162461bcd60e51b81526004016115ed90614e3e565b602c55565b6000546001600160a01b031633146120435760405162461bcd60e51b81526004016115ed90614e3e565b600955565b6000546001600160a01b031633146120725760405162461bcd60e51b81526004016115ed90614e3e565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b031633146120d65760405162461bcd60e51b81526004016115ed90614e3e565b603355565b6000546001600160a01b031633146121055760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461215a5760405162461bcd60e51b81526004016115ed90614e3e565b601e805460ff19169055565b6000546001600160a01b031633146121905760405162461bcd60e51b81526004016115ed90614e3e565b602b55565b6060600580546116f990614f94565b6000546001600160a01b031633146121ce5760405162461bcd60e51b81526004016115ed90614e3e565b43603655565b6000546001600160a01b031633146121fe5760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b039182166000908152602e6020526040902080546001600160a01b03191691909216179055565b6023818154811061223c57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146122805760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b60006117d1338484612cfb565b6000546001600160a01b031633146122e25760405162461bcd60e51b81526004016115ed90614e3e565b818160008181106122f5576122f5615000565b6020029190910135601455508181600181811061231457612314615000565b6020029190910135601555508181600281811061233357612333615000565b6020029190910135601655508181600381811061235257612352615000565b6020029190910135601755508181600481811061237157612371615000565b6020029190910135601855508181600581811061239057612390615000565b602002919091013560195550818160068181106123af576123af615000565b6020029190910135601a5550818160078181106123ce576123ce615000565b6020029190910135601b55505050565b6000546001600160a01b031633146124085760405162461bcd60e51b81526004016115ed90614e3e565b60078111156124595760405162461bcd60e51b815260206004820152601760248201527f6c656e6774682073686f756c64206265203c3d2037202100000000000000000060448201526064016115ed565b8067ffffffffffffffff81111561247257612472615016565b60405190808252806020026020018201604052801561249b578160200160208202803683370190505b5080516124b091602f91602090910190614a7f565b50600060308190555b81811015611a71578282828181106124d3576124d3615000565b90506020020135602f82815481106124ed576124ed615000565b9060005260206000200181905550602f818154811061250e5761250e615000565b90600052602060002001546030600082825461252a9190614f24565b9091555081905061253a81614fcf565b9150506124b9565b6000546001600160a01b0316331461256c5760405162461bcd60e51b81526004016115ed90614e3e565b602d55565b6000546001600160a01b031633148061259457506003546001600160a01b031633145b6125ca5760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b60448201526064016115ed565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b15801561261457600080fd5b505af1158015612628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190c9190614d27565b6000546001600160a01b031633146126765760405162461bcd60e51b81526004016115ed90614e3e565b600855565b6000546001600160a01b031633146126a55760405162461bcd60e51b81526004016115ed90614e3e565b603d55565b600080600080602260009054906101000a90046001600160a01b03169050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561270457600080fd5b505afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190614d44565b506010546001600160701b039283169450911691506001600160a01b03163081101561276d57829650819550612774565b8196508295505b6022546040516370a0823160e01b81526001600160a01b039182166004820152908216906370a082319060240160206040518083038186803b1580156127b957600080fd5b505afa1580156127cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f19190614da2565b945050505050909192565b6000546001600160a01b031633146128265760405162461bcd60e51b81526004016115ed90614e3e565b603580546001600160a01b0319166001600160a01b0392909216919091179055565b60225460408051630240bc6b60e21b815290516000926001600160a01b031691839182918491630902f1ac91600480820192606092909190829003018186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cc9190614d44565b506010546001600160701b039283169450911691506001600160a01b03166000308210156128fb5750816128fe565b50825b846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561293757600080fd5b505afa15801561294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296f9190614da2565b15612a8057846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ad57600080fd5b505afa1580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190614da2565b6040516370a0823160e01b81526001600160a01b0389811660048301528391908816906370a082319060240160206040518083038186803b158015612a2957600080fd5b505afa158015612a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a619190614da2565b612a6b9190614f5e565b612a759190614f3c565b979650505050505050565b5060009695505050505050565b6000546001600160a01b03163314612ab75760405162461bcd60e51b81526004016115ed90614e3e565b602555565b6000546001600160a01b03163314612ae65760405162461bcd60e51b81526004016115ed90614e3e565b60248054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314612b2e5760405162461bcd60e51b81526004016115ed90614e3e565b6001600160a01b038116612b6f5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b60448201526064016115ed565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b803b8015612c38575050565b6001600160a01b038216600090815260386020526040902054612cf7576037541580612c955750816001600160a01b03166037600081548110612c7d57612c7d615000565b6000918252602090912001546001600160a01b031614155b15612cf757603780546001600160a01b0384166000818152603860205260408120839055600183018455929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0180546001600160a01b03191690911790555b5050565b6001600160a01b03831660009081526001602052604090205481811015612d575760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b60448201526064016115ed565b6000612d6285611bcd565b1115612da15760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b60448201526064016115ed565b60125460ff1615612dbe57612db7848484613456565b5050505050565b60225460009081908190819081906001600160a01b038981169116148015612df557503360009081526029602052604090205460ff165b8015612e095750326001600160a01b038a16145b15612e4057612e178761350b565b8015612e28575063ffffffff893b16155b15612e4057506026805461ff00191661010017905560015b6022546000906001600160a01b038b811691161415612e8057612e6288613527565b90508015612e80576026805462ff0000191662010000179055600192505b6001600160a01b038a166000908152600b602052604090205460ff16158015612ec257506001600160a01b0389166000908152600b602052604090205460ff16155b8015612ed75750602454600160a81b900460ff165b8015612ee557506000602554115b8015612f2b57506001600160a01b038a1660009081526011602052604090205460ff1680612f2b57506001600160a01b03891660009081526011602052604090205460ff165b15612faf576000805b602554811015612f925760408051602081018390529081018b90524260608201526080016040516020818303038152906040528051906020012060001c9150612f7f8c836001613456565b5080612f8a81614fcf565b915050612f34565b50602554612fa1906001614f5e565b612fab908a614f7d565b9850505b602154158015612fc85750602254600160a01b900460ff165b156130a7576001600160a01b038a166000908152600b602052604090205460ff1615801561300f57506001600160a01b0389166000908152600b602052604090205460ff16155b801561303457506001600160a01b038a1660009081526011602052604090205460ff16155b801561305957506001600160a01b03891660009081526011602052604090205460ff16155b156130a757883b63ffffffff16156130a75760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b60448201526064016115ed565b6001600160a01b038a1660009081526011602052604090205460ff16806130e657506001600160a01b03891660009081526011602052604090205460ff165b156133d0576001600160a01b038a166000908152600b602052604090205460ff1615801561312d57506001600160a01b0389166000908152600b602052604090205460ff16155b156133aa57602254600160a01b900460ff1615613197576021541515808061315f5750603654600010801561315f5750825b6131955760405162461bcd60e51b815260206004820152600760248201526670617573696e6760c81b60448201526064016115ed565b505b602254600160a01b900460ff1680156131b95750602254600160a81b900460ff165b80156131d357506007546021546131d09190614f24565b43105b80156131f857506001600160a01b03891660009081526011602052604090205460ff16155b15613221576001600160a01b0389166000908152600c60205260409020805460ff191660011790555b601e5460ff16801561324b57506001600160a01b038a1660009081526011602052604090205460ff165b80156132655750601f546021546132629190614f24565b43105b156132c357326000908152601c6020526040902054431461329757326000908152601c602052604090204390556132c3565b601d80549060006132a783614fcf565b91905055506132b78a8a8a613605565b50505050505050505050565b6001600160a01b03891660009081526011602052604090205460ff16156133945760125460ff161580156132f5575081155b156133945730600090815260016020526040902054602854811115613392576000601954601a546018546015546016546014546133329190614f24565b61333c9190614f24565b6133469190614f24565b6133509190614f24565b61335a9190614f24565b9050600060646027548461336e9190614f5e565b6133789190614f3c565b9050828111156133855750815b61338f818361368b565b50505b505b811580156133a0575082155b156133aa57600195505b6001600160a01b03891660009081526011602052604090205460ff16156133d057600194505b6001600160a01b038a1660009081526011602052604090205460ff1615801561341257506001600160a01b03891660009081526011602052604090205460ff16155b1561341c57600193505b61342c8a8a8a898989888a613d62565b6001600160a01b038a1630146132b757841561344b5761344b8a612c2c565b6132b7602a546145b7565b6001600160a01b038316600090815260016020526040812080548391908390613480908490614f7d565b90915550506001600160a01b038316600090815260016020526040812080548492906134ad908490614f24565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134f991815260200190565b60405180910390a35060019392505050565b6000806000806135196126aa565b919091119695505050505050565b60008060006135346126aa565b92505091508181116135fe576022548490613557906001600160a01b0316611e52565b6135619190614f7d565b602260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135af57600080fd5b505afa1580156135c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e79190614da2565b6135f19086614f5e565b6135fb9190614f3c565b92505b5050919050565b6001600160a01b038316600090815260016020526040902054613629908290614f7d565b6001600160a01b038416600090815260016020526040812091909155606461365283605a614f5e565b61365c9190614f3c565b6003549091506136779085906001600160a01b031683614a07565b61190c84846136868486614f7d565b614a07565b6012805460ff191660011790558015806136a3575081155b156136ad57613d54565b60006015546019546136bf9190614f24565b905060008260026136d08487614f5e565b6136da9190614f3c565b6136e49190614f3c565b905060006136f3600284614f3c565b6136fd9085614f7d565b6010546040805160028082526060820183529394506001600160a01b039092169260009291602083019080368337019050509050308160008151811061374557613745615000565b6001600160a01b03928316602091820292909201015260105482519116908290600190811061377657613776615000565b6001600160a01b039283166020918202929092010152600f5416635c11d79561379f868a614f7d565b60125460405160e084901b6001600160e01b03191681526137d99291600091879161010090046001600160a01b0316904290600401614e5e565b600060405180830381600087803b1580156137f357600080fd5b505af1925050508015613804575060015b61383d57604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6012546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a082319060240160206040518083038186803b15801561388957600080fd5b505afa15801561389d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c19190614da2565b9050801561395c576012546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401602060405180830381600087803b15801561392257600080fd5b505af1158015613936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395a9190614d27565b505b600084600261396b8985614f5e565b6139759190614f3c565b61397f9190614f3c565b90506000856018546014546139949190614f24565b61399e9085614f5e565b6139a89190614f3c565b90508015613af95760205460ff1615613a5957601054604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015613a0157600080fd5b505af1158015613a15573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015613a53573d6000803e3d6000fd5b50613ae1565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb90604401602060405180830381600087803b158015613aa757600080fd5b505af1158015613abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adf9190614d27565b505b8060346000828254613af39190614f24565b90915550505b600087118015613b095750600082115b15613bf057600f5460105460355460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b158015613b8a57600080fd5b505af1925050508015613bba575060408051601f3d908101601f19168201909252613bb791810190614dbb565b60015b613bec576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a1613bf0565b5050505b601a54601654613c009190614f24565b613c11575050505050505050613d54565b60105460205461010090046001600160a01b0390811691161415613c3c575050505050505050613d54565b600f546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a082319060240160206040518083038186803b158015613c8957600080fd5b505afa158015613c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc19190614da2565b6000602330426040518663ffffffff1660e01b8152600401613ce7959493929190614ecf565b600060405180830381600087803b158015613d0157600080fd5b505af1925050508015613d12575060015b613d4b57604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506012805460ff19169055565b6001600160a01b038816600090815260016020526040902054613d86908790614f7d565b6001600160a01b038916600090815260016020526040812091909155851561408557602254600160d01b900460ff1615613f3d576001600160a01b03891660009081526011602052604081205460ff1615613de2575087613de5565b50885b600080805b602f54811015613e3157602f8181548110613e0757613e07615000565b906000526020600020015482613e1d9190614f24565b915080613e2981614fcf565b915050613dea565b506000612710613e41838d614f5e565b613e4b9190614f3c565b90508115613f385760005b602f54811015613f36576001600160a01b038086166000908152602e60205260409020541680613e9257506003546001600160a01b0316613ed7565b613e9b866115fc565b613ed757506001600160a01b038086166000908152602e6020908152604080832080546001600160a01b03191690556032909152812055600354165b83602f8381548110613eeb57613eeb615000565b906000526020600020015484613f019190614f5e565b613f0b9190614f3c565b9450613f178588614f24565b9650613f248f8287614a07565b9450613f2f81614fcf565b9050613e56565b505b505050505b60008515613f6957601954601a54601854613f589190614f24565b613f629190614f24565b9050613fe3565b601654601554601454613f7c9190614f24565b613f869190614f24565b602254909150600160b81b900460ff1615613fe357600854881115613fe35760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b60448201526064016115ed565b6000612710613ff2838b614f5e565b613ffc9190614f3c565b9050801561401b5761400e8184614f24565b925061401b8b3083614a07565b600087614044576127106017548b6140339190614f5e565b61403d9190614f3c565b9050614062565b612710601b548b6140559190614f5e565b61405f9190614f3c565b90505b8015614081576140728185614f24565b93506140818c61dead83614a07565b5050505b6001600160a01b03891660009081526011602052604090205460ff161580156140c757506001600160a01b03881660009081526011602052604090205460ff16155b80156140dc5750602254600160d01b900460ff165b15614341576001600160a01b038089166000908152602e60205260409020541615801561412257506001600160a01b0388166000908152600b602052604090205460ff16155b801561414757506031546001600160a01b038916600090815260016020526040902054105b1561429357873b63ffffffff161561419a576040516001600160a01b03891681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de1865579060200160405180910390a1614341565b883b63ffffffff16156141e8576040516001600160a01b038a1681527f8b44836fbe611fd088e1d7aad8db1283cacca11ba574d9ee965317a7de1865579060200160405180910390a1614341565b6031546001600160a01b03891660009081526001602052604090205461420e838a614f7d565b6142189190614f24565b1061428e576001600160a01b038881166000818152602e6020908152604080832080546001600160a01b031916958f1695861790556032825291829020439081905591519182529192917fa8c50a298b4200fd02e706cf001585af8f63488dbd1a4e0e676ea02770a2e0f6910160405180910390a35b614341565b6001600160a01b038089166000908152602e602052604090205416158015906142d557506001600160a01b0388166000908152600b602052604090205460ff16155b15614341576142e3886115fc565b614341576001600160a01b0388166000908152602e6020908152604080832080546001600160a01b03191690556032909152808220829055517f10814c3720b764a0a84f9cc9ad88c790d4cde24ec0be99348bf0aa16ec174fde9190a15b83801561436757506001600160a01b0389166000908152600b602052604090205460ff16155b801561438c57506001600160a01b0388166000908152600b602052604090205460ff16155b156143cf576000612710602b54896143a49190614f5e565b6143ae9190614f3c565b905080156143cd576143c08183614f24565b91506143cd8a3083614a07565b505b8280156143f557506001600160a01b0389166000908152600b602052604090205460ff16155b801561441a57506001600160a01b0388166000908152600b602052604090205460ff16155b1561445d576000612710602c54896144329190614f5e565b61443c9190614f3c565b9050801561445b5761444e8183614f24565b915061445b8a3083614a07565b505b81801561448357506001600160a01b0389166000908152600b602052604090205460ff16155b80156144a857506001600160a01b0388166000908152600b602052604090205460ff16155b156144ed576000612710602d54896144c09190614f5e565b6144ca9190614f3c565b905080156144eb576144dc8183614f24565b91506144eb8a61dead83614a07565b505b6001600160a01b0388166000908152600d602052604090205460ff1615801561451f5750602254600160c01b900460ff165b1561459d576009546001600160a01b038916600090815260016020526040902054829061454d908a90614f24565b6145579190614f7d565b111561459d5760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b60448201526064016115ed565b6145ac8989613686848b614f7d565b505050505050505050565b43603f54603e546145c89190614f24565b11156145d15750565b6020546040516370a0823160e01b81523060048201526101009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b15801561461d57600080fd5b505afa158015614631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146559190614da2565b9050603d5481101561466657505050565b602254604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd91600480820192602092909190829003018186803b1580156146b057600080fd5b505afa1580156146c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e89190614da2565b603754909150600090819081908180805a6040516370a0823160e01b81523060048201529091506001600160a01b038c16906370a082319060240160206040518083038186803b15801561473b57600080fd5b505afa15801561474f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147739190614da2565b99505b8b8310801561478457508382105b156149f55783603c5410614798576000603c555b6037603c54815481106147ad576147ad615000565b6000918252602090912001546040516370a0823160e01b81526001600160a01b03918216600482018190529850908a16906370a082319060240160206040518083038186803b1580156147ff57600080fd5b505afa158015614813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148379190614da2565b955060008611801561486257506001600160a01b03871660009081526039602052604090205460ff16155b80156148885750603b546001600160a01b03881660009081526001602052604090205410155b156149b35787614898878c614f5e565b6148a29190614f3c565b945060008511801561492a57506040516370a0823160e01b815230600482015285906001600160a01b038d16906370a082319060240160206040518083038186803b1580156148f057600080fd5b505afa158015614904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149289190614da2565b115b156149b35760405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790528c169063a9059cbb90604401602060405180830381600087803b15801561497957600080fd5b505af115801561498d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149b19190614d27565b505b5a6149be9082614f7d565b6149c89084614f24565b92505a603c805491925060006149dd83614fcf565b919050555081806149ed90614fcf565b925050614776565b505043603e5550505050505050505050565b6001600160a01b038216600090815260016020526040902054614a2b908290614f24565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c1f9085815260200190565b828054828255906000526020600020908101928215614aba579160200282015b82811115614aba578251825591602001919060010190614a9f565b50614ac6929150614aca565b5090565b5b80821115614ac65760008155600101614acb565b60008083601f840112614af157600080fd5b50813567ffffffffffffffff811115614b0957600080fd5b6020830191508360208260051b8501011115614b2457600080fd5b9250929050565b80516001600160701b0381168114611bfe57600080fd5b600060208284031215614b5457600080fd5b8135614b5f8161502c565b9392505050565b60008060408385031215614b7957600080fd5b8235614b848161502c565b91506020830135614b948161502c565b809150509250929050565b600080600060608486031215614bb457600080fd5b8335614bbf8161502c565b92506020840135614bcf8161502c565b929592945050506040919091013590565b60008060408385031215614bf357600080fd5b8235614bfe8161502c565b91506020830135614b9481615041565b60008060408385031215614c2157600080fd5b8235614c2c8161502c565b946020939093013593505050565b600080600060608486031215614c4f57600080fd5b8335614c5a8161502c565b9250602084013591506040840135614c718161502c565b809150509250925092565b60008060208385031215614c8f57600080fd5b823567ffffffffffffffff811115614ca657600080fd5b614cb285828601614adf565b90969095509350505050565b600080600060408486031215614cd357600080fd5b833567ffffffffffffffff811115614cea57600080fd5b614cf686828701614adf565b9094509250506020840135614c7181615041565b600060208284031215614d1c57600080fd5b8135614b5f81615041565b600060208284031215614d3957600080fd5b8151614b5f81615041565b600080600060608486031215614d5957600080fd5b614d6284614b2b565b9250614d7060208501614b2b565b9150604084015163ffffffff81168114614c7157600080fd5b600060208284031215614d9b57600080fd5b5035919050565b600060208284031215614db457600080fd5b5051919050565b600080600060608486031215614dd057600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b81811015614e1657858101830151858201604001528201614dfa565b81811115614e28576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614eae5784516001600160a01b031683529383019391830191600101614e89565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015614eae5784546001600160a01b031683526001948501949284019201614eff565b60008219821115614f3757614f37614fea565b500190565b600082614f5957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f7857614f78614fea565b500290565b600082821015614f8f57614f8f614fea565b500390565b600181811c90821680614fa857607f821691505b60208210811415614fc957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614fe357614fe3614fea565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b9b57600080fd5b8015158114611b9b57600080fdfea26469706673582212208b8dcdc634c0a0b1144dcbdc216e978dc6ffbd936d0c3888b870e19c4a85bc8064736f6c63430008060033

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.