false
true
0

Contract Address Details

0x5F648c462F89D3b9aD7786beDAD6fCcE817d2cb8

Token
Ape HEX (APEHEX)
Creator
0xc9e372–fc7fe4 at 0x3436b7–4c58a4
Balance
592,238.546958757594536236 PLS ( )
Tokens
Fetching tokens...
Transactions
694 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25962428
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
APEHEX




Optimization enabled
true
Compiler version
v0.7.6+commit.7338295f




Optimization runs
200
EVM Version
default




Verified at
2023-10-22T06:27:52.491490Z

Constructor Arguments

0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000007417065204845580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064150454845580000000000000000000000000000000000000000000000000000

Arg [0] (string) : Ape HEX
Arg [1] (string) : APEHEX
Arg [2] (uint8) : 9
Arg [3] (uint256) : 100000000000000

              

Contract source code

/**
Https://t.me/ApeHEXOfficial
Buy fee: 3% pHEX Rewards
Sell fee: 3% pHEX Rewards
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IBEP20 RWRD = IBEP20(0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39);
    address WBNB = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 45 * 60;
    uint256 public minDistribution = 1 * (10 ** 13);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = RWRD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(RWRD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RWRD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RWRD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract APEHEX is IBEP20, Auth {
    using SafeMath for uint256;

    address WBNB = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

    uint256 public _maxTxAmount = _totalSupply;
    uint256 public _maxWalletToken = _totalSupply;

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

    bool public blacklistMode = true;
    mapping (address => bool) public isBlacklisted;


    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    uint256 public liquidityFee    = 0;
    uint256 public reflectionFee   = 3;
    uint256 public marketingFee    = 0;
    uint256 public devFee          = 0;
    uint256 public totalFee        = marketingFee + reflectionFee + liquidityFee + devFee;
    uint256 public feeDenominator  = 100;

    uint256 public sellMultiplier  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = false;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 3;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 50 / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        string memory tokenName, 
        string memory tokenSymbol, 
        uint8 tokenDecimals, 
        uint256 tokenTotalSupply
    ) Auth(msg.sender) {
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = tokenDecimals; 
        _totalSupply = tokenTotalSupply.mul(10**uint256(tokenDecimals));
        _maxTxAmount = _totalSupply;
        _maxWalletToken = _totalSupply;
        swapThreshold = _totalSupply * 50 / 10000;
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;
        devFeeReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        // Blacklist
        if(blacklistMode){
            require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");    
        }


        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != devFeeReceiver  && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount,(recipient == pair)) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external authorized {
        uint256 amountBNB = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountBNB * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB * amountPercentage / 100);
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;        
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance.sub(balanceBefore);

        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);
        uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountBNBDev, gas: 30000}("");
        
        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }


    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }


    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(_devFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/3, "Fees cannot be more than 33%");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"uint256","name":"tokenTotalSupply","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountBNB","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"blacklistMode","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"buyCooldownEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance_sender","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cooldownEnabled","inputs":[{"type":"bool","name":"_status","internalType":"bool"},{"type":"uint8","name":"_interval","internalType":"uint8"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"cooldownTimerInterval","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"devFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enable_blacklist","inputs":[{"type":"bool","name":"_status","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklisted","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"manage_blacklist","inputs":[{"type":"address[]","name":"addresses","internalType":"address[]"},{"type":"bool","name":"status","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellMultiplier","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"},{"type":"address","name":"_devFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxPercent_base1000","inputs":[{"type":"uint256","name":"maxTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletPercent_base1000","inputs":[{"type":"uint256","name":"maxWallPercent_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"set_sell_multiplier","inputs":[{"type":"uint256","name":"Multiplier","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"tradingStatus","inputs":[{"type":"bool","name":"_status","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040526002805473a1077a294dde1b09bb078844df40758a5d0f9a276001600160a01b0319918216179091556003805461dead908316178155600480549092169091556008546009819055600a819055600d805460ff1990811660019081179092556000601381905560148581556015829055601691909155601794909455606460188190556019819055601d94909455601e939093556020805460ff60a01b191690556207a120602255602380548416821761ff00191661030017905560258054909316179091556127109060320204602655348015620000e257600080fd5b506040516200426c3803806200426c833981810160405260808110156200010857600080fd5b81019080805160405193929190846401000000008211156200012957600080fd5b9083019060208201858111156200013f57600080fd5b82516401000000008111828201881017156200015a57600080fd5b82525081516020918201929091019080838360005b83811015620001895781810151838201526020016200016f565b50505050905090810190601f168015620001b75780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001db57600080fd5b908301906020820185811115620001f157600080fd5b82516401000000008111828201881017156200020c57600080fd5b82525081516020918201929091019080838360005b838110156200023b57818101518382015260200162000221565b50505050905090810190601f168015620002695780820380516001836020036101000a031916815260200191505b50604090815260208281015192820151600080546001600160a01b03191633908117825581526001808452939020805460ff19169093179092558651929450909250620002bc9160059187019062000642565b508251620002d290600690602086019062000642565b506007805460ff191660ff841690811790915562000301908290600a0a620005db602090811b62001ccc17901c565b60088190556009819055600a8190556127109060320204602655601f80546001600160a01b03191673165c3410fc91ef562c50559f7d2289febed552d917908190556040805163c45a015560e01b815290516001600160a01b03929092169163c45a015591600480820192602092909190829003018186803b1580156200038757600080fd5b505afa1580156200039c573d6000803e3d6000fd5b505050506040513d6020811015620003b357600080fd5b5051600254604080516364e329cb60e11b81526001600160a01b0392831660048201523060248201529051919092169163c9c653969160448083019260209291908290030181600087803b1580156200040b57600080fd5b505af115801562000420573d6000803e3d6000fd5b505050506040513d60208110156200043757600080fd5b5051602080546001600160a01b0319166001600160a01b03928316178155306000908152600c82526040808220601f8054861684529352908190206000199055905490519116906200048990620006d7565b6001600160a01b03909116815260405190819003602001906000f080158015620004b7573d6000803e3d6000fd5b50602180546001600160a01b039283166001600160a01b031991821617909155336000818152600f60209081526040808320805460ff1990811660019081179092556010845282852080548216831790556011845282852080548216831790556003805489168652838620805483168417905530808752848720805484168517905585548a16875260128652848720805484168517905586528386208054831684179055549097168452818420805490971617909555601a8054851684179055601b8054851684179055601c80549094168317909355600854828252600b845284822081905584519081529351919390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050620006fc565b600082620005ec575060006200063c565b82820282848281620005fa57fe5b0414620006395760405162461bcd60e51b81526004018080602001828103825260218152602001806200424b6021913960400191505060405180910390fd5b90505b92915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200067a5760008555620006c5565b82601f106200069557805160ff1916838001178555620006c5565b82800160010185558215620006c5579182015b82811115620006c5578251825591602001919060010190620006a8565b50620006d3929150620006e5565b5090565b610ec0806200338b83390190565b5b80821115620006d35760008155600101620006e6565b612c7f806200070c6000396000f3fe60806040526004361061039b5760003560e01c80637d1db4a5116101dc578063d7c0103211610102578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610cfb578063fe9fbb8014610d2e578063fed0d2a114610d61578063ffb54a9914610d76576103a2565b8063f2fde38b14610c3d578063f708a64f14610c70578063f84ba65d14610cab578063f887ea4014610ce6576103a2565b8063df20fd49116100dc578063df20fd4914610b99578063e96fada214610bcb578063ec72d65f14610be0578063f0b37c0414610c0a576103a2565b8063d7c0103214610b04578063dab84ee714610b49578063dd62ed3e14610b5e576103a2565b80639d1944f51161017a578063bd9ab53711610149578063bd9ab53714610a86578063bfe1092814610ab0578063ca33e64c14610ac5578063d51ed1c814610ada576103a2565b80639d1944f5146109db578063a8aa1b3114610a05578063a9059cbb14610a1a578063b6a5d7de14610a53576103a2565b8063896648c1116101b6578063896648c11461091d5780638e2eee841461093257806395d89b41146109b157806398118cb4146109c6576103a2565b80637d1db4a5146108c257806383ad7994146108d7578063893d20e8146108ec576103a2565b80632d594567116102c1578063617fe0ed1161025f5780636ddd17131161022e5780636ddd17131461085057806370a0823114610865578063722b62ad1461089857806378109e54146108ad576103a2565b8063617fe0ed146107d6578063658d4b7f146107eb5780636827e764146108265780636b67c4df1461083b576103a2565b806344a33fd21161029b57806344a33fd214610723578063571ac8b01461074d5780635c85974f146107805780635e562f3b146107aa576103a2565b80632d594567146106905780632f54bf6e146106c5578063313ce567146106f8576103a2565b8063180b0d7e11610339578063201e799111610308578063201e7991146105d857806323b872dd146106085780632b112e491461064b5780632d48e89614610660576103a2565b8063180b0d7e1461056f57806318160ddd146105845780631da1db5e146105995780631df4ccfc146105c3576103a2565b806309302dc61161037557806309302dc61461049c578063095ea7b3146104c65780630d295980146105135780631161ae391461053f576103a2565b80630445b667146103a757806304a66b48146103ce57806306fdde0314610412576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610d8b565b60408051918252519081900360200190f35b3480156103da57600080fd5b50610410600480360360a08110156103f157600080fd5b5080359060208101359060408101359060608101359060800135610d91565b005b34801561041e57600080fd5b50610427610e6b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610461578181015183820152602001610449565b50505050905090810190601f16801561048e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104a857600080fd5b50610410600480360360208110156104bf57600080fd5b5035610f01565b3480156104d257600080fd5b506104ff600480360360408110156104e957600080fd5b506001600160a01b038135169060200135610f5a565b604080519115158252519081900360200190f35b34801561051f57600080fd5b506104106004803603602081101561053657600080fd5b50351515610fc1565b34801561054b57600080fd5b506104ff6004803603604081101561056257600080fd5b5080359060200135611022565b34801561057b57600080fd5b506103bc611036565b34801561059057600080fd5b506103bc61103c565b3480156105a557600080fd5b50610410600480360360208110156105bc57600080fd5b5035611042565b3480156105cf57600080fd5b506103bc6110d2565b3480156105e457600080fd5b50610410600480360360408110156105fb57600080fd5b50803590602001356110d8565b34801561061457600080fd5b506104ff6004803603606081101561062b57600080fd5b506001600160a01b0381358116916020810135909116906040013561112b565b34801561065757600080fd5b506103bc6111ed565b34801561066c57600080fd5b506104106004803603604081101561068357600080fd5b5080359060200135611236565b34801561069c57600080fd5b50610410600480360360408110156106b357600080fd5b5080351515906020013560ff166112ee565b3480156106d157600080fd5b506104ff600480360360208110156106e857600080fd5b50356001600160a01b0316611357565b34801561070457600080fd5b5061070d61136b565b6040805160ff9092168252519081900360200190f35b34801561072f57600080fd5b506104106004803603602081101561074657600080fd5b5035611374565b34801561075957600080fd5b506104ff6004803603602081101561077057600080fd5b50356001600160a01b03166113cb565b34801561078c57600080fd5b50610410600480360360208110156107a357600080fd5b50356113d9565b3480156107b657600080fd5b50610410600480360360208110156107cd57600080fd5b50351515611426565b3480156107e257600080fd5b506104ff61147c565b3480156107f757600080fd5b506104106004803603604081101561080e57600080fd5b506001600160a01b0381351690602001351515611485565b34801561083257600080fd5b506103bc6114f8565b34801561084757600080fd5b506103bc6114fe565b34801561085c57600080fd5b506104ff611504565b34801561087157600080fd5b506103bc6004803603602081101561088857600080fd5b50356001600160a01b031661150d565b3480156108a457600080fd5b5061070d611528565b3480156108b957600080fd5b506103bc611536565b3480156108ce57600080fd5b506103bc61153c565b3480156108e357600080fd5b506103bc611542565b3480156108f857600080fd5b50610901611548565b604080516001600160a01b039092168252519081900360200190f35b34801561092957600080fd5b506104ff611557565b34801561093e57600080fd5b506104106004803603604081101561095557600080fd5b81019060208101813564010000000081111561097057600080fd5b82018360208201111561098257600080fd5b803590602001918460208302840111640100000000831117156109a457600080fd5b9193509150351515611560565b3480156109bd57600080fd5b506104276115fe565b3480156109d257600080fd5b506103bc61165f565b3480156109e757600080fd5b50610410600480360360208110156109fe57600080fd5b5035611665565b348015610a1157600080fd5b506109016116c1565b348015610a2657600080fd5b506104ff60048036036040811015610a3d57600080fd5b506001600160a01b0381351690602001356116d0565b348015610a5f57600080fd5b5061041060048036036020811015610a7657600080fd5b50356001600160a01b03166116dd565b348015610a9257600080fd5b5061041060048036036020811015610aa957600080fd5b5035611747565b348015610abc57600080fd5b506109016117a0565b348015610ad157600080fd5b506109016117af565b348015610ae657600080fd5b506103bc60048036036020811015610afd57600080fd5b50356117be565b348015610b1057600080fd5b5061041060048036036060811015610b2757600080fd5b506001600160a01b0381358116916020810135821691604090910135166117fe565b348015610b5557600080fd5b50610901611885565b348015610b6a57600080fd5b506103bc60048036036040811015610b8157600080fd5b506001600160a01b0381358116916020013516611894565b348015610ba557600080fd5b5061041060048036036040811015610bbc57600080fd5b508035151590602001356118bf565b348015610bd757600080fd5b5061090161191e565b348015610bec57600080fd5b5061041060048036036020811015610c0357600080fd5b503561192d565b348015610c1657600080fd5b5061041060048036036020811015610c2d57600080fd5b50356001600160a01b0316611975565b348015610c4957600080fd5b5061041060048036036020811015610c6057600080fd5b50356001600160a01b03166119d9565b348015610c7c57600080fd5b5061041060048036036040811015610c9357600080fd5b506001600160a01b0381351690602001351515611a8a565b348015610cb757600080fd5b5061041060048036036040811015610cce57600080fd5b506001600160a01b0381351690602001351515611c01565b348015610cf257600080fd5b50610901611c74565b348015610d0757600080fd5b506104ff60048036036020811015610d1e57600080fd5b50356001600160a01b0316611c83565b348015610d3a57600080fd5b506104ff60048036036020811015610d5157600080fd5b50356001600160a01b0316611c98565b348015610d6d57600080fd5b506103bc611cb6565b348015610d8257600080fd5b506104ff611cbc565b60265481565b610d9a33611c98565b610dd9576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6013859055601484905560158390556016829055610e0382610dfd85818989611d25565b90611d25565b60175560188190556003810460175410610e64576040805162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e2033332500000000604482015290519081900360640190fd5b5050505050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b610f0a33611357565b610f44576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6103e8816008540281610f5357fe5b04600a5550565b336000818152600c602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610fca33611357565b611004576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60208054911515600160a01b0260ff60a01b19909216919091179055565b60008261102e836117be565b119392505050565b60185481565b60085490565b61104b33611c98565b61108a576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b5447906001600160a01b03166108fc60648484025b049081150290604051600060405180830381858888f193505050501580156110cd573d6000803e3d6000fd5b505050565b60175481565b6110e133611c98565b611120576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d91909155601e55565b6001600160a01b0383166000908152600c60209081526040808320338452909152812054600019146111d8576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c825283812033825290915291909120546111b3918490611d7f565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b6111e3848484611e16565b90505b9392505050565b60045460009061123190611209906001600160a01b031661150d565b60035461122b90611222906001600160a01b031661150d565b60085490612405565b90612405565b905090565b61123f33611c98565b61127e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b602154604080516316a4744b60e11b8152600481018590526024810184905290516001600160a01b0390921691632d48e8969160448082019260009290919082900301818387803b1580156112d257600080fd5b505af11580156112e6573d6000803e3d6000fd5b505050505050565b6112f733611357565b611331576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6023805460ff19169215159290921761ff00191661010060ff9290921691909102179055565b6000546001600160a01b0390811691161490565b60075460ff1690565b61137d33611c98565b6113bc576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b47336108fc60648484026110a1565b6000610fbb82600019610f5a565b6113e233611c98565b611421576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600955565b61142f33611357565b611469576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b60235460ff1681565b61148e33611c98565b6114cd576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60165481565b60155481565b60255460ff1681565b6001600160a01b03166000908152600b602052604090205490565b602354610100900460ff1681565b600a5481565b60095481565b60145481565b6000546001600160a01b031690565b600d5460ff1681565b61156933611357565b6115a3576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60005b828110156115f85781600e60008686858181106115bf57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016115a6565b50505050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b60135481565b61166e33611c98565b6116ad576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620b71b081106116bc57600080fd5b602255565b6020546001600160a01b031681565b60006111e6338484611e16565b6116e633611357565b611720576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61175033611357565b61178a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6103e881600854028161179957fe5b0460095550565b6021546001600160a01b031681565b601a546001600160a01b031681565b6000610fbb6117cb6111ed565b6020546117f8906117f1906002906117eb906001600160a01b031661150d565b90611ccc565b8590611ccc565b90612447565b61180733611c98565b611846576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601a80546001600160a01b039485166001600160a01b031991821617909155601b805493851693821693909317909255601c8054919093169116179055565b601c546001600160a01b031681565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b6118c833611c98565b611907576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6025805460ff191692151592909217909155602655565b601b546001600160a01b031681565b61193633611357565b611970576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601955565b61197e33611357565b6119b8576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b6119e233611357565b611a1c576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b611a9333611c98565b611ad2576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b0382163014801590611af957506020546001600160a01b03838116911614155b611b0257600080fd5b6001600160a01b0382166000908152601260205260409020805460ff19168215801591909117909155611b9f5760215460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292519316926314b6ca969260448084019391929182900301818387803b158015611b8257600080fd5b505af1158015611b96573d6000803e3d6000fd5b50505050611bfd565b6021546001600160a01b038381166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b1580156112d257600080fd5b5050565b611c0a33611c98565b611c49576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b601f546001600160a01b031681565b600e6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b60195481565b602054600160a01b900460ff1681565b600082611cdb57506000610fbb565b82820282848281611ce857fe5b04146111e65760405162461bcd60e51b8152600401808060200182810382526021815260200180612beb6021913960400191505060405180910390fd5b6000828201838110156111e6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115611e0e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dd3578181015183820152602001611dbb565b50505050905090810190601f168015611e005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60275460009060ff1615611e3657611e2f848484612489565b90506111e6565b6001600160a01b03841660009081526001602052604090205460ff16158015611e7857506001600160a01b03831660009081526001602052604090205460ff16155b15611ed257602054600160a01b900460ff16611ed2576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b600d5460ff1615611f5e576001600160a01b0384166000908152600e602052604090205460ff16158015611f1f57506001600160a01b0383166000908152600e602052604090205460ff16155b611f5e576040805162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015290519081900360640190fd5b6001600160a01b03841660009081526001602052604090205460ff16158015611f9057506001600160a01b0383163014155b8015611faa57506003546001600160a01b03848116911614155b8015611fc457506020546001600160a01b03848116911614155b8015611fde5750601b546001600160a01b03848116911614155b8015611ff85750601c546001600160a01b03848116911614155b80156120125750601a546001600160a01b03848116911614155b156120695760006120228461150d565b9050600a5483820111156120675760405162461bcd60e51b815260040180806020018281038252603e815260200180612c0c603e913960400191505060405180910390fd5b505b6020546001600160a01b038581169116148015612088575060235460ff165b80156120ad57506001600160a01b03831660009081526011602052604090205460ff16155b15612131576001600160a01b03831660009081526024602052604090205442116121085760405162461bcd60e51b8152600401808060200182810382526025815260200180612bc66025913960400191505060405180910390fd5b6023546001600160a01b038416600090815260246020526040902061010090910460ff16420190555b61213b848361256a565b6121436125d8565b1561215057612150612627565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b90915291909120546121a2918490611d7f565b6001600160a01b0385166000908152600b60205260408120919091556121c785612a82565b6121d157826121ef565b6020546121ef90869085906001600160a01b03888116911614612aa1565b6001600160a01b0385166000908152600b60205260409020549091506122159082611d25565b6001600160a01b038086166000908152600b602090815260408083209490945591881681526012909152205460ff166122b9576021546001600160a01b038681166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b1580156122a657600080fd5b505af19250505080156122b7575060015b505b6001600160a01b03841660009081526012602052604090205460ff1661234a576021546001600160a01b038581166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b15801561233757600080fd5b505af1925050508015612348575060015b505b602154602254604080516001624d3b8760e01b031981526004810192909252516001600160a01b039092169163ffb2c4799160248082019260009290919082900301818387803b15801561239d57600080fd5b505af19250505080156123ae575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d7f565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b60565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b909152918220546124da918490611d7f565b6001600160a01b038086166000908152600b602052604080822093909355908516815220546125099083611d25565b6001600160a01b038085166000818152600b602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b6009548111158061259357506001600160a01b03821660009081526010602052604090205460ff165b611bfd576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6020546000906001600160a01b031633148015906125f9575060275460ff16155b8015612607575060255460ff165b8015611231575050602654306000908152600b6020526040902054101590565b6027805460ff19166001179055601d54601e5460009161264691611022565b61265257601354612655565b60005b9050600061267960026117f86017546117f886602654611ccc90919063ffffffff16565b905060006126928260265461240590919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106126c657fe5b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126f157fe5b6001600160a01b03928316602091820292909201810191909152601f5460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561278b578181015183820152602001612773565b505050509050019650505050505050600060405180830381600087803b1580156127b457600080fd5b505af11580156127c8573d6000803e3d6000fd5b5050505060006127e1824761240590919063ffffffff16565b905060006127fc6127f3886002612447565b60175490612405565b9050600061281160026117f88481878d611ccc565b9050600061282e836117f860145487611ccc90919063ffffffff16565b9050600061284b846117f860155488611ccc90919063ffffffff16565b90506000612868856117f860165489611ccc90919063ffffffff16565b9050602160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128ba57600080fd5b505af1935050505080156128cc575060015b50601b546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461291f576040519150601f19603f3d011682016040523d82523d6000602084013e612924565b606091505b5050601c546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114612979576040519150601f19603f3d011682016040523d82523d6000602084013e61297e565b606091505b5060009250508b159050612a6a57601f54601a546040805163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991889160c48082019260609290919082900301818588803b158015612a0157600080fd5b505af1158015612a15573d6000803e3d6000fd5b50505050506040513d6060811015612a2c57600080fd5b505060408051868152602081018d905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b50506027805460ff1916905550505050505050505050565b6001600160a01b03166000908152600f602052604090205460ff161590565b60008082612ab0576064612ab4565b6019545b90506000612ada6018546064026117f8846117eb6017548a611ccc90919063ffffffff16565b306000908152600b6020526040902054909150612af79082611d25565b306000818152600b6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3612b568582612405565b9695505050505050565b60008183612baf5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611dd3578181015183820152602001611dbb565b506000838581612bbb57fe5b049594505050505056fe506c65617365207761697420666f7220316d696e206265747765656e2074776f2062757973536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682ea2646970667358221220b319169ab965542b3c5382d1ad13a26e3be10df8aeb9f1d9d8327b1e01c1622764736f6c634300070600336080604052600180546001600160a01b0319908116732b591e99afe9f32eaa6214f7b7629768c40eeb39179091556002805490911673a1077a294dde1b09bb078844df40758a5d0f9a271790556ec097ce7bc90715b34b9f1000000000600c55610a8c600d556509184e72a000600e5534801561007b57600080fd5b50604051610ec0380380610ec08339818101604052602081101561009e57600080fd5b50516001600160a01b0381166100c85773165c3410fc91ef562c50559f7d2289febed552d96100ca565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610dbc806101046000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610254578063f0fc6bca14610269578063ffb2c4791461027e578063ffd49c84146102a8576100dd565b8063ce7c2ac2146101e6578063d0e30db014610237578063e2d2e2191461023f576100dd565b80632d48e896116100bb5780632d48e896146101775780633a98ef39146101a75780634fab0ae8146101bc578063997664d7146101d1576100dd565b806311ce023d146100e257806314b6ca961461010957806328fd319814610144575b600080fd5b3480156100ee57600080fd5b506100f76102bd565b60408051918252519081900360200190f35b34801561011557600080fd5b506101426004803603604081101561012c57600080fd5b506001600160a01b0381351690602001356102c3565b005b34801561015057600080fd5b506100f76004803603602081101561016757600080fd5b50356001600160a01b03166103e8565b34801561018357600080fd5b506101426004803603604081101561019a57600080fd5b5080359060200135610474565b3480156101b357600080fd5b506100f7610496565b3480156101c857600080fd5b506100f761049c565b3480156101dd57600080fd5b506100f76104a2565b3480156101f257600080fd5b506102196004803603602081101561020957600080fd5b50356001600160a01b03166104a8565b60408051938452602084019290925282820152519081900360600190f35b6101426104c9565b34801561024b57600080fd5b506100f761075b565b34801561026057600080fd5b506100f7610761565b34801561027557600080fd5b50610142610767565b34801561028a57600080fd5b50610142600480360360208110156102a157600080fd5b5035610772565b3480156102b457600080fd5b506100f7610854565b600c5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b03821660009081526007602052604090205415610301576103018261085a565b60008111801561032757506001600160a01b038216600090815260076020526040902054155b1561033a5761033582610982565b61036d565b8015801561035f57506001600160a01b03821660009081526007602052604090205415155b1561036d5761036d826109e3565b6001600160a01b03821660009081526007602052604090205460085461039e91839161039891610ad0565b90610b1b565b6008556001600160a01b03821660009081526007602052604090208190556103c581610b75565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461040d5750600061046f565b6001600160a01b03821660009081526007602052604081205461042f90610b75565b6001600160a01b0384166000908152600760205260409020600101549091508082116104605760009250505061046f565b61046a8282610ad0565b925050505b919050565b6000546001600160a01b0316331461048b57600080fd5b600d91909155600e55565b60085481565b600e5481565b60095481565b60076020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b031633146104e057600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561052b57600080fd5b505afa15801561053f573d6000803e3d6000fd5b505050506040513d602081101561055557600080fd5b50516040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061059757fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106105c157fe5b6001600160a01b0392831660209182029290920181019190915260035460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561065357818101518382015260200161063b565b50505050905001955050505050506000604051808303818588803b15801561067a57600080fd5b505af115801561068e573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061071994508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156106e757600080fd5b505afa1580156106fb573d6000803e3d6000fd5b505050506040513d602081101561071157600080fd5b505190610ad0565b6009549091506107299082610b1b565b600955600854600c546107539161074a916107449085610b92565b90610beb565b600b5490610b1b565b600b55505050565b600b5481565b600a5481565b6107703361085a565b565b6000546001600160a01b0316331461078957600080fd5b600454806107975750610851565b6000805a905060005b84831080156107ae57508381105b1561084c5783600f54106107c2576000600f555b6107ee6004600f54815481106107d457fe5b6000918252602090912001546001600160a01b0316610c2d565b1561081f5761081f6004600f548154811061080557fe5b6000918252602090912001546001600160a01b031661085a565b61083461082d5a8490610ad0565b8490610b1b565b92505a600f80546001908101909155909250016107a0565b505050505b50565b600d5481565b6001600160a01b03811660009081526007602052604090205461087c57610851565b6000610887826103e8565b9050801561097e57600a5461089c9082610b1b565b600a556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156108f557600080fd5b505af1158015610909573d6000803e3d6000fd5b505050506040513d602081101561091f57600080fd5b50506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109549082610b1b565b6001600160a01b03831660009081526007602052604090206002810191909155546103c590610b75565b5050565b600480546001600160a01b039092166000818152600560205260408120849055600184018355919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90910180546001600160a01b0319169091179055565b6004805460001981019081106109f557fe5b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610a2d57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916000198101908110610a7b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610aab57fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b1283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c69565b90505b92915050565b600082820183811015610b12576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610b15600c54610744600b5485610b9290919063ffffffff16565b600082610ba157506000610b15565b82820282848281610bae57fe5b0414610b125760405162461bcd60e51b8152600401808060200182810382526021815260200180610d666021913960400191505060405180910390fd5b6000610b1283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d00565b600d546001600160a01b0382166000908152600660205260408120549091429101108015610b155750600e54610c62836103e8565b1192915050565b60008184841115610cf85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbd578181015183820152602001610ca5565b50505050905090810190601f168015610cea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610d4f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610cbd578181015183820152602001610ca5565b506000838581610d5b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212209eb27147e1709998bafb25b488c789b01728fec177cac5a04b191e644dd65e5464736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000007417065204845580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064150454845580000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x60806040526004361061039b5760003560e01c80637d1db4a5116101dc578063d7c0103211610102578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610cfb578063fe9fbb8014610d2e578063fed0d2a114610d61578063ffb54a9914610d76576103a2565b8063f2fde38b14610c3d578063f708a64f14610c70578063f84ba65d14610cab578063f887ea4014610ce6576103a2565b8063df20fd49116100dc578063df20fd4914610b99578063e96fada214610bcb578063ec72d65f14610be0578063f0b37c0414610c0a576103a2565b8063d7c0103214610b04578063dab84ee714610b49578063dd62ed3e14610b5e576103a2565b80639d1944f51161017a578063bd9ab53711610149578063bd9ab53714610a86578063bfe1092814610ab0578063ca33e64c14610ac5578063d51ed1c814610ada576103a2565b80639d1944f5146109db578063a8aa1b3114610a05578063a9059cbb14610a1a578063b6a5d7de14610a53576103a2565b8063896648c1116101b6578063896648c11461091d5780638e2eee841461093257806395d89b41146109b157806398118cb4146109c6576103a2565b80637d1db4a5146108c257806383ad7994146108d7578063893d20e8146108ec576103a2565b80632d594567116102c1578063617fe0ed1161025f5780636ddd17131161022e5780636ddd17131461085057806370a0823114610865578063722b62ad1461089857806378109e54146108ad576103a2565b8063617fe0ed146107d6578063658d4b7f146107eb5780636827e764146108265780636b67c4df1461083b576103a2565b806344a33fd21161029b57806344a33fd214610723578063571ac8b01461074d5780635c85974f146107805780635e562f3b146107aa576103a2565b80632d594567146106905780632f54bf6e146106c5578063313ce567146106f8576103a2565b8063180b0d7e11610339578063201e799111610308578063201e7991146105d857806323b872dd146106085780632b112e491461064b5780632d48e89614610660576103a2565b8063180b0d7e1461056f57806318160ddd146105845780631da1db5e146105995780631df4ccfc146105c3576103a2565b806309302dc61161037557806309302dc61461049c578063095ea7b3146104c65780630d295980146105135780631161ae391461053f576103a2565b80630445b667146103a757806304a66b48146103ce57806306fdde0314610412576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610d8b565b60408051918252519081900360200190f35b3480156103da57600080fd5b50610410600480360360a08110156103f157600080fd5b5080359060208101359060408101359060608101359060800135610d91565b005b34801561041e57600080fd5b50610427610e6b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610461578181015183820152602001610449565b50505050905090810190601f16801561048e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104a857600080fd5b50610410600480360360208110156104bf57600080fd5b5035610f01565b3480156104d257600080fd5b506104ff600480360360408110156104e957600080fd5b506001600160a01b038135169060200135610f5a565b604080519115158252519081900360200190f35b34801561051f57600080fd5b506104106004803603602081101561053657600080fd5b50351515610fc1565b34801561054b57600080fd5b506104ff6004803603604081101561056257600080fd5b5080359060200135611022565b34801561057b57600080fd5b506103bc611036565b34801561059057600080fd5b506103bc61103c565b3480156105a557600080fd5b50610410600480360360208110156105bc57600080fd5b5035611042565b3480156105cf57600080fd5b506103bc6110d2565b3480156105e457600080fd5b50610410600480360360408110156105fb57600080fd5b50803590602001356110d8565b34801561061457600080fd5b506104ff6004803603606081101561062b57600080fd5b506001600160a01b0381358116916020810135909116906040013561112b565b34801561065757600080fd5b506103bc6111ed565b34801561066c57600080fd5b506104106004803603604081101561068357600080fd5b5080359060200135611236565b34801561069c57600080fd5b50610410600480360360408110156106b357600080fd5b5080351515906020013560ff166112ee565b3480156106d157600080fd5b506104ff600480360360208110156106e857600080fd5b50356001600160a01b0316611357565b34801561070457600080fd5b5061070d61136b565b6040805160ff9092168252519081900360200190f35b34801561072f57600080fd5b506104106004803603602081101561074657600080fd5b5035611374565b34801561075957600080fd5b506104ff6004803603602081101561077057600080fd5b50356001600160a01b03166113cb565b34801561078c57600080fd5b50610410600480360360208110156107a357600080fd5b50356113d9565b3480156107b657600080fd5b50610410600480360360208110156107cd57600080fd5b50351515611426565b3480156107e257600080fd5b506104ff61147c565b3480156107f757600080fd5b506104106004803603604081101561080e57600080fd5b506001600160a01b0381351690602001351515611485565b34801561083257600080fd5b506103bc6114f8565b34801561084757600080fd5b506103bc6114fe565b34801561085c57600080fd5b506104ff611504565b34801561087157600080fd5b506103bc6004803603602081101561088857600080fd5b50356001600160a01b031661150d565b3480156108a457600080fd5b5061070d611528565b3480156108b957600080fd5b506103bc611536565b3480156108ce57600080fd5b506103bc61153c565b3480156108e357600080fd5b506103bc611542565b3480156108f857600080fd5b50610901611548565b604080516001600160a01b039092168252519081900360200190f35b34801561092957600080fd5b506104ff611557565b34801561093e57600080fd5b506104106004803603604081101561095557600080fd5b81019060208101813564010000000081111561097057600080fd5b82018360208201111561098257600080fd5b803590602001918460208302840111640100000000831117156109a457600080fd5b9193509150351515611560565b3480156109bd57600080fd5b506104276115fe565b3480156109d257600080fd5b506103bc61165f565b3480156109e757600080fd5b50610410600480360360208110156109fe57600080fd5b5035611665565b348015610a1157600080fd5b506109016116c1565b348015610a2657600080fd5b506104ff60048036036040811015610a3d57600080fd5b506001600160a01b0381351690602001356116d0565b348015610a5f57600080fd5b5061041060048036036020811015610a7657600080fd5b50356001600160a01b03166116dd565b348015610a9257600080fd5b5061041060048036036020811015610aa957600080fd5b5035611747565b348015610abc57600080fd5b506109016117a0565b348015610ad157600080fd5b506109016117af565b348015610ae657600080fd5b506103bc60048036036020811015610afd57600080fd5b50356117be565b348015610b1057600080fd5b5061041060048036036060811015610b2757600080fd5b506001600160a01b0381358116916020810135821691604090910135166117fe565b348015610b5557600080fd5b50610901611885565b348015610b6a57600080fd5b506103bc60048036036040811015610b8157600080fd5b506001600160a01b0381358116916020013516611894565b348015610ba557600080fd5b5061041060048036036040811015610bbc57600080fd5b508035151590602001356118bf565b348015610bd757600080fd5b5061090161191e565b348015610bec57600080fd5b5061041060048036036020811015610c0357600080fd5b503561192d565b348015610c1657600080fd5b5061041060048036036020811015610c2d57600080fd5b50356001600160a01b0316611975565b348015610c4957600080fd5b5061041060048036036020811015610c6057600080fd5b50356001600160a01b03166119d9565b348015610c7c57600080fd5b5061041060048036036040811015610c9357600080fd5b506001600160a01b0381351690602001351515611a8a565b348015610cb757600080fd5b5061041060048036036040811015610cce57600080fd5b506001600160a01b0381351690602001351515611c01565b348015610cf257600080fd5b50610901611c74565b348015610d0757600080fd5b506104ff60048036036020811015610d1e57600080fd5b50356001600160a01b0316611c83565b348015610d3a57600080fd5b506104ff60048036036020811015610d5157600080fd5b50356001600160a01b0316611c98565b348015610d6d57600080fd5b506103bc611cb6565b348015610d8257600080fd5b506104ff611cbc565b60265481565b610d9a33611c98565b610dd9576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6013859055601484905560158390556016829055610e0382610dfd85818989611d25565b90611d25565b60175560188190556003810460175410610e64576040805162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e2033332500000000604482015290519081900360640190fd5b5050505050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b610f0a33611357565b610f44576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6103e8816008540281610f5357fe5b04600a5550565b336000818152600c602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b610fca33611357565b611004576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60208054911515600160a01b0260ff60a01b19909216919091179055565b60008261102e836117be565b119392505050565b60185481565b60085490565b61104b33611c98565b61108a576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601b5447906001600160a01b03166108fc60648484025b049081150290604051600060405180830381858888f193505050501580156110cd573d6000803e3d6000fd5b505050565b60175481565b6110e133611c98565b611120576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601d91909155601e55565b6001600160a01b0383166000908152600c60209081526040808320338452909152812054600019146111d8576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c825283812033825290915291909120546111b3918490611d7f565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b6111e3848484611e16565b90505b9392505050565b60045460009061123190611209906001600160a01b031661150d565b60035461122b90611222906001600160a01b031661150d565b60085490612405565b90612405565b905090565b61123f33611c98565b61127e576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b602154604080516316a4744b60e11b8152600481018590526024810184905290516001600160a01b0390921691632d48e8969160448082019260009290919082900301818387803b1580156112d257600080fd5b505af11580156112e6573d6000803e3d6000fd5b505050505050565b6112f733611357565b611331576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6023805460ff19169215159290921761ff00191661010060ff9290921691909102179055565b6000546001600160a01b0390811691161490565b60075460ff1690565b61137d33611c98565b6113bc576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b47336108fc60648484026110a1565b6000610fbb82600019610f5a565b6113e233611c98565b611421576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b600955565b61142f33611357565b611469576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b60235460ff1681565b61148e33611c98565b6114cd576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60165481565b60155481565b60255460ff1681565b6001600160a01b03166000908152600b602052604090205490565b602354610100900460ff1681565b600a5481565b60095481565b60145481565b6000546001600160a01b031690565b600d5460ff1681565b61156933611357565b6115a3576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b60005b828110156115f85781600e60008686858181106115bf57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016115a6565b50505050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b60135481565b61166e33611c98565b6116ad576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b620b71b081106116bc57600080fd5b602255565b6020546001600160a01b031681565b60006111e6338484611e16565b6116e633611357565b611720576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61175033611357565b61178a576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6103e881600854028161179957fe5b0460095550565b6021546001600160a01b031681565b601a546001600160a01b031681565b6000610fbb6117cb6111ed565b6020546117f8906117f1906002906117eb906001600160a01b031661150d565b90611ccc565b8590611ccc565b90612447565b61180733611c98565b611846576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b601a80546001600160a01b039485166001600160a01b031991821617909155601b805493851693821693909317909255601c8054919093169116179055565b601c546001600160a01b031681565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b6118c833611c98565b611907576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6025805460ff191692151592909217909155602655565b601b546001600160a01b031681565b61193633611357565b611970576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b601955565b61197e33611357565b6119b8576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b6119e233611357565b611a1c576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff1916909217909155825191825291517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163929181900390910190a150565b611a9333611c98565b611ad2576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b0382163014801590611af957506020546001600160a01b03838116911614155b611b0257600080fd5b6001600160a01b0382166000908152601260205260409020805460ff19168215801591909117909155611b9f5760215460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292519316926314b6ca969260448084019391929182900301818387803b158015611b8257600080fd5b505af1158015611b96573d6000803e3d6000fd5b50505050611bfd565b6021546001600160a01b038381166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b1580156112d257600080fd5b5050565b611c0a33611c98565b611c49576040805162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b601f546001600160a01b031681565b600e6020526000908152604090205460ff1681565b6001600160a01b031660009081526001602052604090205460ff1690565b60195481565b602054600160a01b900460ff1681565b600082611cdb57506000610fbb565b82820282848281611ce857fe5b04146111e65760405162461bcd60e51b8152600401808060200182810382526021815260200180612beb6021913960400191505060405180910390fd5b6000828201838110156111e6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115611e0e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dd3578181015183820152602001611dbb565b50505050905090810190601f168015611e005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60275460009060ff1615611e3657611e2f848484612489565b90506111e6565b6001600160a01b03841660009081526001602052604090205460ff16158015611e7857506001600160a01b03831660009081526001602052604090205460ff16155b15611ed257602054600160a01b900460ff16611ed2576040805162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604482015290519081900360640190fd5b600d5460ff1615611f5e576001600160a01b0384166000908152600e602052604090205460ff16158015611f1f57506001600160a01b0383166000908152600e602052604090205460ff16155b611f5e576040805162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b604482015290519081900360640190fd5b6001600160a01b03841660009081526001602052604090205460ff16158015611f9057506001600160a01b0383163014155b8015611faa57506003546001600160a01b03848116911614155b8015611fc457506020546001600160a01b03848116911614155b8015611fde5750601b546001600160a01b03848116911614155b8015611ff85750601c546001600160a01b03848116911614155b80156120125750601a546001600160a01b03848116911614155b156120695760006120228461150d565b9050600a5483820111156120675760405162461bcd60e51b815260040180806020018281038252603e815260200180612c0c603e913960400191505060405180910390fd5b505b6020546001600160a01b038581169116148015612088575060235460ff165b80156120ad57506001600160a01b03831660009081526011602052604090205460ff16155b15612131576001600160a01b03831660009081526024602052604090205442116121085760405162461bcd60e51b8152600401808060200182810382526025815260200180612bc66025913960400191505060405180910390fd5b6023546001600160a01b038416600090815260246020526040902061010090910460ff16420190555b61213b848361256a565b6121436125d8565b1561215057612150612627565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b90915291909120546121a2918490611d7f565b6001600160a01b0385166000908152600b60205260408120919091556121c785612a82565b6121d157826121ef565b6020546121ef90869085906001600160a01b03888116911614612aa1565b6001600160a01b0385166000908152600b60205260409020549091506122159082611d25565b6001600160a01b038086166000908152600b602090815260408083209490945591881681526012909152205460ff166122b9576021546001600160a01b038681166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b1580156122a657600080fd5b505af19250505080156122b7575060015b505b6001600160a01b03841660009081526012602052604090205460ff1661234a576021546001600160a01b038581166000818152600b6020526040808220548151630a5b654b60e11b8152600481019490945260248401525192909316926314b6ca969260448084019382900301818387803b15801561233757600080fd5b505af1925050508015612348575060015b505b602154602254604080516001624d3b8760e01b031981526004810192909252516001600160a01b039092169163ffb2c4799160248082019260009290919082900301818387803b15801561239d57600080fd5b505af19250505080156123ae575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d7f565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b60565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b909152918220546124da918490611d7f565b6001600160a01b038086166000908152600b602052604080822093909355908516815220546125099083611d25565b6001600160a01b038085166000818152600b602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b6009548111158061259357506001600160a01b03821660009081526010602052604090205460ff165b611bfd576040805162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015290519081900360640190fd5b6020546000906001600160a01b031633148015906125f9575060275460ff16155b8015612607575060255460ff165b8015611231575050602654306000908152600b6020526040902054101590565b6027805460ff19166001179055601d54601e5460009161264691611022565b61265257601354612655565b60005b9050600061267960026117f86017546117f886602654611ccc90919063ffffffff16565b905060006126928260265461240590919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106126c657fe5b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126f157fe5b6001600160a01b03928316602091820292909201810191909152601f5460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561278b578181015183820152602001612773565b505050509050019650505050505050600060405180830381600087803b1580156127b457600080fd5b505af11580156127c8573d6000803e3d6000fd5b5050505060006127e1824761240590919063ffffffff16565b905060006127fc6127f3886002612447565b60175490612405565b9050600061281160026117f88481878d611ccc565b9050600061282e836117f860145487611ccc90919063ffffffff16565b9050600061284b846117f860155488611ccc90919063ffffffff16565b90506000612868856117f860165489611ccc90919063ffffffff16565b9050602160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128ba57600080fd5b505af1935050505080156128cc575060015b50601b546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461291f576040519150601f19603f3d011682016040523d82523d6000602084013e612924565b606091505b5050601c546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114612979576040519150601f19603f3d011682016040523d82523d6000602084013e61297e565b606091505b5060009250508b159050612a6a57601f54601a546040805163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991889160c48082019260609290919082900301818588803b158015612a0157600080fd5b505af1158015612a15573d6000803e3d6000fd5b50505050506040513d6060811015612a2c57600080fd5b505060408051868152602081018d905281517f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506929181900390910190a15b50506027805460ff1916905550505050505050505050565b6001600160a01b03166000908152600f602052604090205460ff161590565b60008082612ab0576064612ab4565b6019545b90506000612ada6018546064026117f8846117eb6017548a611ccc90919063ffffffff16565b306000908152600b6020526040902054909150612af79082611d25565b306000818152600b6020908152604091829020939093558051848152905191926001600160a01b038a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3612b568582612405565b9695505050505050565b60008183612baf5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611dd3578181015183820152602001611dbb565b506000838581612bbb57fe5b049594505050505056fe506c65617365207761697420666f7220316d696e206265747765656e2074776f2062757973536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682ea2646970667358221220b319169ab965542b3c5382d1ad13a26e3be10df8aeb9f1d9d8327b1e01c1622764736f6c63430007060033