ETH Price: $3,465.40 (+4.45%)

Token

Lunatics (LunaT)
 

Overview

Max Total Supply

100,000,000,000 LunaT

Holders

398

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
13,287,031.85787227 LunaT

Value
$0.00
0x7f875fdd366303124a19b0dbecdbc9d66a9ae3d1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LUNATICS

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : LUNATICS.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

// SAFEMATH LIBRARY
// This version of SafeMath should only be used with Solidity 0.8 or later

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    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;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "Not owner");
        _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "Not authorized");
        _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 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;
    }

     IERC20 REWARD_TOKEN = IERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599); //mainnet
     address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //mainnet

    
    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 = 1 hours;
    uint256 public minDistribution = 100000;

    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(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setRewardToken(address _rewardToken) external onlyToken {
        REWARD_TOKEN = IERC20(_rewardToken);
    }

    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 = REWARD_TOKEN.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(REWARD_TOKEN);

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

        uint256 amount = REWARD_TOKEN.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);
            REWARD_TOKEN.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 LUNATICS is IERC20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address REWARD_TOKEN = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; //mainnet
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //mainnet

   
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Lunatics";
    string constant _symbol = "LunaT";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_00_000_000_000 * (10**_decimals);

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

    mapping(address => bool) public isFeeExempt;

    mapping(address => bool) public isDividendExempt;

    uint256 liquidityFee = 100;
    uint256 reflectionFee = 300;
    uint256 marketingFee = 300;
    uint256 burnFee = 100;
    uint256 totalFee = 800;
    uint256 feeDenominator = 10000;

    address public marketingFeeReceiver;

    IDEXRouter public router;
    address public pair;

    bool public tradingEnabled = false;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 2000; // 0.005%
    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        distributorAddress = address(distributor);

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

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

        marketingFeeReceiver = 0x5bc9cF0933adFeFC9F5ea55E294c4Cd580b97Dfd;

        approve(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, _totalSupply);
        approve(address(pair), _totalSupply);
        _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 pure override returns (uint8) {
        return _decimals;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function name() external pure 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, _totalSupply);
    }

    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] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {

        if (!isOwner(sender)) {
            require(tradingEnabled, "Trading is disabled");
        }
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }
        if(sender != pair && recipient != pair)
        {
            return _basicTransfer(sender, recipient, amount);
        }
      

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

        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
      
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, amount)
            : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        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 shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if(isFeeExempt[sender] || isFeeExempt[recipient]){return false;}
        else{return true;}
        
    }

    function takeFee(address sender, uint256 amount)
        internal
        returns (uint256)
    {
        uint256 feeAmount = amount.mul(totalFee - burnFee).div(feeDenominator);
        uint256 burnFeeAmount = amount.mul(burnFee).div(feeDenominator);

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

        return amount.sub(feeAmount + burnFeeAmount);
    }

    function setIsFeeExempt(address wallet, bool value) public authorized {
        isFeeExempt[wallet] = value;
    }

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

    function swapBack() internal swapping {
        uint256 amountToLiquify = swapThreshold
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(
            totalETHFee
        );
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        try distributor.deposit{value: amountETHReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountETHMarketing);

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

    // Trading once enabled, can't be disabled
    function enableTrading() external onlyOwner {
        tradingEnabled = true;
    }

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

    function setAreDividendAndFeeExempt(address[] calldata wallets, bool exempt)
        external
        authorized
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            setIsDividendExempt(wallets[i], exempt);
            setIsFeeExempt(wallets[i], exempt);
        }
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _reflectionFee,
        uint256 _marketingFee,
        uint256 _burnFee
    ) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        burnFee = _burnFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(
            burnFee
        );
        require(totalFee <= 2500, "Fees must be less than 25%");
    }

    function setFeeReceivers(address _marketingFeeReceiver)
        external
        authorized
    {
        marketingFeeReceiver = _marketingFeeReceiver;
    }

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

    function setRewardToken(address newToken) external authorized {
        require(newToken != address(0), "Invalid address");
        distributor.setRewardToken(newToken);
        REWARD_TOKEN = newToken;
    }

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

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000, "Inappropriate gas amount");
        distributorGas = gas;
    }

    function clearStuckBalance() external authorized {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    function clearStuckTokens(address _tokenContract) public authorized {
        require(
            _tokenContract != address(this),
            "Cannot withdraw native token"
        );
        IERC20 tokenContract = IERC20(_tokenContract);
        tokenContract.transfer(
            msg.sender,
            tokenContract.balanceOf(address(this))
        );
    }

    function Airdrop(address[] memory addresses, uint256[] memory amounts)
        external
        authorized
    {
        require(
            addresses.length == amounts.length,
            "Airdrop: addresses and amounts length mismatch"
        );
        for (uint256 i = 0; i < addresses.length; i++) {
            _basicTransfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amount);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setAreDividendAndFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b0319908116732260fac5e5542a773aa44fbcfedf7c193bc2c599179091556003805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556200005a6009600a62000653565b6200006b9064174876e8006200066b565b60048190556064600981905561012c600a819055600b55600c55610320600d55612710600e556011805460ff60a01b191690556207a1206014556015805460ff19166001179055620000c1906107d0906200068d565b601655348015620000d157600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560108054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620006b0565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620001d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f69190620006b0565b601180546001600160a01b0319166001600160a01b039283161790556004805430600090815260066020908152604080832060108054881685529083529281902093909355905482516315ab88c960e31b8152925194169363ad5c464893838101938290030181865afa15801562000272573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002989190620006b0565b600380546001600160a01b0319166001600160a01b0392909216919091179055604051737a250d5630b4cf539739df2c5dacb4c659f2488d90620002dc9062000532565b6001600160a01b039091168152602001604051809103906000f08015801562000309573d6000803e3d6000fd5b50601280546001600160a01b039283166001600160a01b03199182168117909255601380548216909217909155336000908152600760208181526040808420805460ff1990811660019081179092553080875283872080548316841790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d80548316841790557f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df80548316841781556011549099168752600885528387208054831684179055865291852080548316821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805483168217905593805291905283541617909155600f8054909116735bc9cf0933adfefc9f5ea55e294c4cd580b97dfd1790556004546200045690737a250d5630b4cf539739df2c5dacb4c659f2488d90620004c4565b5060115460045462000472916001600160a01b031690620004c4565b5060045433600081815260056020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620006db565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005209086815260200190565b60405180910390a35060015b92915050565b610e9080620029aa83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005975781600019048211156200057b576200057b62000540565b808516156200058957918102915b93841c93908002906200055b565b509250929050565b600082620005b0575060016200052c565b81620005bf575060006200052c565b8160018114620005d85760028114620005e35762000603565b60019150506200052c565b60ff841115620005f757620005f762000540565b50506001821b6200052c565b5060208310610133831016604e8410600b841016171562000628575081810a6200052c565b62000634838362000556565b80600019048211156200064b576200064b62000540565b029392505050565b60006200066460ff8416836200059f565b9392505050565b600081600019048311821515161562000688576200068862000540565b500290565b600082620006ab57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006c357600080fd5b81516001600160a01b03811681146200066457600080fd5b6122bf80620006eb6000396000f3fe60806040526004361061023f5760003560e01c80638a8c523c1161012e578063dd62ed3e116100ab578063f0b37c041161006f578063f0b37c0414610745578063f2fde38b14610765578063f708a64f14610785578063f887ea40146107a5578063fe9fbb80146107c557600080fd5b8063dd62ed3e1461067b578063df20fd49146106c1578063e01bb688146106e1578063e91f214e14610701578063e96fada21461072557600080fd5b8063a8aa1b31116100f2578063a8aa1b31146105db578063a9059cbb146105fb578063ad5c46481461061b578063b6a5d7de1461063b578063c558ae6b1461065b57600080fd5b80638a8c523c146105385780638aee81271461054d57806395d89b411461056d5780639d1944f51461059b578063a51af4c5146105bb57600080fd5b80633f4218e0116101bc57806365d43ac71161018057806365d43ac7146104765780636ddd1713146104965780636fcba377146104b057806370a08231146104d0578063893d20e81461050657600080fd5b80633f4218e0146103b55780634355855a146103e55780634ada218b14610415578063571ac8b014610436578063658d4b7f1461045657600080fd5b80632d48e896116102035780632d48e896146103135780632f54bf6e14610335578063313ce56714610364578063346cc7be14610380578063364333f4146103a057600080fd5b80630445b6671461024b57806306fdde0314610274578063095ea7b3146102ae57806318160ddd146102de57806323b872dd146102f357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026160165481565b6040519081526020015b60405180910390f35b34801561028057600080fd5b506040805180820190915260088152674c756e617469637360c01b60208201525b60405161026b9190611c7f565b3480156102ba57600080fd5b506102ce6102c9366004611cec565b6107e5565b604051901515815260200161026b565b3480156102ea57600080fd5b50600454610261565b3480156102ff57600080fd5b506102ce61030e366004611d18565b610852565b34801561031f57600080fd5b5061033361032e366004611d59565b610916565b005b34801561034157600080fd5b506102ce610350366004611d7b565b6000546001600160a01b0391821691161490565b34801561037057600080fd5b506040516009815260200161026b565b34801561038c57600080fd5b5061033361039b366004611d7b565b6109ae565b3480156103ac57600080fd5b50610333610b13565b3480156103c157600080fd5b506102ce6103d0366004611d7b565b60076020526000908152604090205460ff1681565b3480156103f157600080fd5b506102ce610400366004611d7b565b60086020526000908152604090205460ff1681565b34801561042157600080fd5b506011546102ce90600160a01b900460ff1681565b34801561044257600080fd5b506102ce610451366004611d7b565b610b6b565b34801561046257600080fd5b50610333610471366004611da6565b610b79565b34801561048257600080fd5b50610333610491366004611ddf565b610bc9565b3480156104a257600080fd5b506015546102ce9060ff1681565b3480156104bc57600080fd5b506103336104cb366004611e65565b610c71565b3480156104dc57600080fd5b506102616104eb366004611d7b565b6001600160a01b031660009081526005602052604090205490565b34801561051257600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161026b565b34801561054457600080fd5b50610333610d16565b34801561055957600080fd5b50610333610568366004611d7b565b610d55565b34801561057957600080fd5b50604080518082019091526005815264131d5b985560da1b60208201526102a1565b3480156105a757600080fd5b506103336105b6366004611e97565b610e44565b3480156105c757600080fd5b50601354610520906001600160a01b031681565b3480156105e757600080fd5b50601154610520906001600160a01b031681565b34801561060757600080fd5b506102ce610616366004611cec565b610ec0565b34801561062757600080fd5b50600354610520906001600160a01b031681565b34801561064757600080fd5b50610333610656366004611d7b565b610ecd565b34801561066757600080fd5b50610333610676366004611f86565b610f1e565b34801561068757600080fd5b50610261610696366004612048565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156106cd57600080fd5b506103336106dc366004612076565b611007565b3480156106ed57600080fd5b506103336106fc366004611d7b565b611043565b34801561070d57600080fd5b506102616fffffffffffffffffffffffffffffffff81565b34801561073157600080fd5b50600f54610520906001600160a01b031681565b34801561075157600080fd5b50610333610760366004611d7b565b61108a565b34801561077157600080fd5b50610333610780366004611d7b565b6110d5565b34801561079157600080fd5b506103336107a0366004611da6565b61116b565b3480156107b157600080fd5b50601054610520906001600160a01b031681565b3480156107d157600080fd5b506102ce6107e0366004611d7b565b61126f565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108409086815260200190565b60405180910390a35060015b92915050565b6004546001600160a01b0384166000908152600660209081526040808320338452909152812054909114610901576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526006825283812033825290915291909120546108dc91849061128d565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b61090c8484846112b9565b90505b9392505050565b61091f3361126f565b6109445760405162461bcd60e51b815260040161093b90612094565b60405180910390fd5b6012546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561099257600080fd5b505af11580156109a6573d6000803e3d6000fd5b505050505050565b6109b73361126f565b6109d35760405162461bcd60e51b815260040161093b90612094565b306001600160a01b03821603610a2b5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e00000000604482015260640161093b565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f91906120bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e91906120d5565b505050565b610b1c3361126f565b610b385760405162461bcd60e51b815260040161093b90612094565b6040514790339082156108fc029083906000818181858888f19350505050158015610b67573d6000803e3d6000fd5b5050565b600061084c826004546107e5565b610b823361126f565b610b9e5760405162461bcd60e51b815260040161093b90612094565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610bd23361126f565b610bee5760405162461bcd60e51b815260040161093b90612094565b60005b82811015610c6b57610c29848483818110610c0e57610c0e6120f2565b9050602002016020810190610c239190611d7b565b8361116b565b610c59848483818110610c3e57610c3e6120f2565b9050602002016020810190610c539190611d7b565b83610b79565b80610c638161211e565b915050610bf1565b50505050565b610c7a3361126f565b610c965760405162461bcd60e51b815260040161093b90612094565b6009849055600a839055600b829055600c819055610cc081610cba8481888861161d565b9061161d565b600d8190556109c41015610c6b5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e20323525000000000000604482015260640161093b565b6000546001600160a01b03163314610d405760405162461bcd60e51b815260040161093b90612137565b6011805460ff60a01b1916600160a01b179055565b610d5e3361126f565b610d7a5760405162461bcd60e51b815260040161093b90612094565b6001600160a01b038116610dc25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161093b565b601254604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b5050600280546001600160a01b0319166001600160a01b0394909416939093179092555050565b610e4d3361126f565b610e695760405162461bcd60e51b815260040161093b90612094565b620b71b08110610ebb5760405162461bcd60e51b815260206004820152601860248201527f496e617070726f7072696174652067617320616d6f756e740000000000000000604482015260640161093b565b601455565b600061090f3384846112b9565b6000546001600160a01b03163314610ef75760405162461bcd60e51b815260040161093b90612137565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610f273361126f565b610f435760405162461bcd60e51b815260040161093b90612094565b8051825114610fab5760405162461bcd60e51b815260206004820152602e60248201527f41697264726f703a2061646472657373657320616e6420616d6f756e7473206c60448201526d0cadccee8d040dad2e6dac2e8c6d60931b606482015260840161093b565b60005b8251811015610b0e57610ff433848381518110610fcd57610fcd6120f2565b6020026020010151848481518110610fe757610fe76120f2565b6020026020010151611629565b5080610fff8161211e565b915050610fae565b6110103361126f565b61102c5760405162461bcd60e51b815260040161093b90612094565b6015805460ff191692151592909217909155601655565b61104c3361126f565b6110685760405162461bcd60e51b815260040161093b90612094565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110b45760405162461bcd60e51b815260040161093b90612137565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146110ff5760405162461bcd60e51b815260040161093b90612137565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6111743361126f565b6111905760405162461bcd60e51b815260040161093b90612094565b6001600160a01b03821630148015906111b757506011546001600160a01b03838116911614155b6111c057600080fd5b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561122657601254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610978565b6012546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610978565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156112b15760405162461bcd60e51b815260040161093b9190611c7f565b505050900390565b600080546001600160a01b0385811691161461131e57601154600160a01b900460ff1661131e5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b604482015260640161093b565b60175460ff161561133b57611334848484611629565b905061090f565b6011546001600160a01b0385811691161480159061136757506011546001600160a01b03848116911614155b1561137757611334848484611629565b61137f6116fd565b1561138c5761138c61174e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600590915291909120546113de91849061128d565b6001600160a01b0385166000908152600560205260408120919091556114048585611aa8565b61140e5782611418565b6114188584611afc565b6001600160a01b03851660009081526005602052604090205490915061143e908261161d565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff166114e2576012546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156114cf57600080fd5b505af19250505080156114e0575060015b505b6001600160a01b03841660009081526008602052604090205460ff16611573576012546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561156057600080fd5b505af1925050508015611571575060015b505b6012546014546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916115ab9160040190815260200190565b600060405180830381600087803b1580156115c557600080fd5b505af19250505080156115d6575060015b50836001600160a01b0316856001600160a01b031660008051602061226a8339815191528360405161160a91815260200190565b60405180910390a3506001949350505050565b600061090f828461215a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260059091529182205461167a91849061128d565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546116a9908361161d565b6001600160a01b03808516600081815260056020526040908190209390935591519086169060008051602061226a833981519152906116eb9086815260200190565b60405180910390a35060019392505050565b6011546000906001600160a01b0316331480159061171e575060175460ff16155b801561172c575060155460ff165b801561174957506016543060009081526005602052604090205410155b905090565b6017805460ff19166001179055600d546009546016546000926117819260029261177b9291839190611c5b565b90611c67565b9050600061179a82601654611c7390919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106117d4576117d46120f2565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611805576118056120f2565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81524792919091169063791ac9479061184f908690600090879030904290600401612172565b600060405180830381600087803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b5050505060006118968247611c7390919063ffffffff16565b905060006118bc6118b36002600954611c6790919063ffffffff16565b600d5490611c73565b905060006118de600261177b8461177b60095488611c5b90919063ffffffff16565b905060006118fb8361177b600a5487611c5b90919063ffffffff16565b905060006119188461177b600b5488611c5b90919063ffffffff16565b9050601260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561196a57600080fd5b505af19350505050801561197c575060015b50600f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119b7573d6000803e3d6000fd5b508815611a93576010546000805460405163f305d71960e01b8152306004820152602481018d90526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990859060c40160606040518083038185885af1158015611a31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a5691906121e3565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506017805460ff1916905550505050505050565b6001600160a01b03821660009081526007602052604081205460ff1680611ae757506001600160a01b03821660009081526007602052604090205460ff165b15611af45750600061084c565b50600161084c565b600080611b1f600e5461177b600c54600d54611b189190612211565b8690611c5b565b90506000611b3e600e5461177b600c5487611c5b90919063ffffffff16565b30600090815260056020526040902054909150611b5b908361161d565b30600081815260056020526040908190209290925590516001600160a01b0387169060008051602061226a83398151915290611b9a9086815260200190565b60405180910390a361dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54611bd9908261161d565b61dead600081905260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba919091556040516001600160a01b0387169060008051602061226a83398151915290611c369085815260200190565b60405180910390a3611c52611c4b828461215a565b8590611c73565b95945050505050565b600061090f8284612228565b600061090f8284612247565b600061090f8284612211565b600060208083528351808285015260005b81811015611cac57858101830151858201604001528201611c90565b81811115611cbe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611ce957600080fd5b50565b60008060408385031215611cff57600080fd5b8235611d0a81611cd4565b946020939093013593505050565b600080600060608486031215611d2d57600080fd5b8335611d3881611cd4565b92506020840135611d4881611cd4565b929592945050506040919091013590565b60008060408385031215611d6c57600080fd5b50508035926020909101359150565b600060208284031215611d8d57600080fd5b813561090f81611cd4565b8015158114611ce957600080fd5b60008060408385031215611db957600080fd5b8235611dc481611cd4565b91506020830135611dd481611d98565b809150509250929050565b600080600060408486031215611df457600080fd5b833567ffffffffffffffff80821115611e0c57600080fd5b818601915086601f830112611e2057600080fd5b813581811115611e2f57600080fd5b8760208260051b8501011115611e4457600080fd5b60209283019550935050840135611e5a81611d98565b809150509250925092565b60008060008060808587031215611e7b57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611ea957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611eef57611eef611eb0565b604052919050565b600067ffffffffffffffff821115611f1157611f11611eb0565b5060051b60200190565b600082601f830112611f2c57600080fd5b81356020611f41611f3c83611ef7565b611ec6565b82815260059290921b84018101918181019086841115611f6057600080fd5b8286015b84811015611f7b5780358352918301918301611f64565b509695505050505050565b60008060408385031215611f9957600080fd5b823567ffffffffffffffff80821115611fb157600080fd5b818501915085601f830112611fc557600080fd5b81356020611fd5611f3c83611ef7565b82815260059290921b84018101918181019089841115611ff457600080fd5b948201945b8386101561201b57853561200c81611cd4565b82529482019490820190611ff9565b9650508601359250508082111561203157600080fd5b5061203e85828601611f1b565b9150509250929050565b6000806040838503121561205b57600080fd5b823561206681611cd4565b91506020830135611dd481611cd4565b6000806040838503121561208957600080fd5b8235611d0a81611d98565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156120ce57600080fd5b5051919050565b6000602082840312156120e757600080fd5b815161090f81611d98565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161213057612130612108565b5060010190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000821982111561216d5761216d612108565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121c25784516001600160a01b03168352938301939183019160010161219d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156121f857600080fd5b8351925060208401519150604084015190509250925092565b60008282101561222357612223612108565b500390565b600081600019048311821515161561224257612242612108565b500290565b60008261226457634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122097c240b7cc7ba84e4e9fc544e5527d3e33df62fb4013bb4b4d1e09a31536452364736f6c634300080f00336080604052600180546001600160a01b0319908116732260fac5e5542a773aa44fbcfedf7c193bc2c599179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55620186a0600e5534801561007857600080fd5b50604051610e90380380610e90833981016040819052610097916100f1565b6001600160a01b0381166100bf57737a250d5630b4cf539739df2c5dacb4c659f2488d6100c1565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610121565b60006020828403121561010357600080fd5b81516001600160a01b038116811461011a57600080fd5b9392505050565b610d60806101306000396000f3fe6080604052600436106100e85760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed1461024f578063f0fc6bca14610265578063ffb2c4791461027a578063ffd49c841461029a57600080fd5b8063997664d7146101c4578063ce7c2ac2146101da578063d0e30db014610231578063e2d2e2191461023957600080fd5b80632d48e896116100c65780632d48e896146101585780633a98ef39146101785780634fab0ae81461018e5780638aee8127146101a457600080fd5b806311ce023d146100ed57806314b6ca961461011657806328fd319814610138575b600080fd5b3480156100f957600080fd5b50610103600c5481565b6040519081526020015b60405180910390f35b34801561012257600080fd5b50610136610131366004610b3a565b6102b0565b005b34801561014457600080fd5b50610103610153366004610b64565b610428565b34801561016457600080fd5b50610136610173366004610b7f565b6104b3565b34801561018457600080fd5b5061010360085481565b34801561019a57600080fd5b50610103600e5481565b3480156101b057600080fd5b506101366101bf366004610b64565b6104d5565b3480156101d057600080fd5b5061010360095481565b3480156101e657600080fd5b506102166101f5366004610b64565b60076020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161010d565b61013661050e565b34801561024557600080fd5b50610103600b5481565b34801561025b57600080fd5b50610103600a5481565b34801561027157600080fd5b5061013661073d565b34801561028657600080fd5b50610136610295366004610ba1565b610748565b3480156102a657600080fd5b50610103600d5481565b6000546001600160a01b031633146102c757600080fd5b6001600160a01b038216600090815260076020526040902054156102ee576102ee8261084c565b60008111801561031457506001600160a01b038216600090815260076020526040902054155b1561037a57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103ad565b8015801561039f57506001600160a01b03821660009081526007602052604090205415155b156103ad576103ad8261096a565b6001600160a01b0382166000908152600760205260409020546008546103de9183916103d891610a7f565b90610a92565b6008556001600160a01b038216600090815260076020526040902081905561040581610a9e565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b038116600090815260076020526040812054810361044f57506000919050565b6001600160a01b03821660009081526007602052604081205461047190610a9e565b6001600160a01b0384166000908152600760205260409020600101549091508082116104a1575060009392505050565b6104ab8282610a7f565b949350505050565b6000546001600160a01b031633146104ca57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104ec57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461052557600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561056e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105929190610bba565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906105d8576105d8610bd3565b6001600160a01b039283166020918202929092010152600180548351921691839190811061060857610608610bd3565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061064e90600090869030904290600401610be9565b6000604051808303818588803b15801561066757600080fd5b505af115801561067b573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106fb93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156106d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f59190610bba565b90610a7f565b60095490915061070b9082610a92565b600955600854600c546107359161072c916107269085610ac1565b90610acd565b600b5490610a92565b600b55505050565b6107463361084c565b565b6000546001600160a01b0316331461075f57600080fd5b600454600081900361076f575050565b6000805a905060005b848310801561078657508381105b156108455783600f541061079a576000600f555b6107cc6004600f54815481106107b2576107b2610bd3565b6000918252602090912001546001600160a01b0316610ad9565b15610803576108036004600f54815481106107e9576107e9610bd3565b6000918252602090912001546001600160a01b031661084c565b6108186108115a8490610a7f565b8490610a92565b92505a600f8054919350600061082d83610c69565b9190505550808061083d90610c69565b915050610778565b5050505050565b6001600160a01b038116600090815260076020526040812054900361086e5750565b600061087982610428565b9050801561096657600a5461088e9082610a92565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109089190610c82565b506001600160a01b0382166000908152600660209081526040808320429055600790915290206002015461093c9082610a92565b6001600160a01b038316600090815260076020526040902060028101919091555461040590610a9e565b5050565b6004805461097a90600190610ca4565b8154811061098a5761098a610bd3565b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109c8576109c8610bd3565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a1490600190610ca4565b81548110610a2457610a24610bd3565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a5a57610a5a610cbb565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a8b8284610ca4565b9392505050565b6000610a8b8284610cd1565b6000610abb600c54610726600b5485610ac190919063ffffffff16565b92915050565b6000610a8b8284610ce9565b6000610a8b8284610d08565b600d546001600160a01b03821660009081526006602052604081205490914291610b039190610cd1565b108015610abb5750600e54610b1783610428565b1192915050565b80356001600160a01b0381168114610b3557600080fd5b919050565b60008060408385031215610b4d57600080fd5b610b5683610b1e565b946020939093013593505050565b600060208284031215610b7657600080fd5b610a8b82610b1e565b60008060408385031215610b9257600080fd5b50508035926020909101359150565b600060208284031215610bb357600080fd5b5035919050565b600060208284031215610bcc57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610c335784516001600160a01b031683529383019391830191600101610c0e565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610c7b57610c7b610c53565b5060010190565b600060208284031215610c9457600080fd5b81518015158114610a8b57600080fd5b600082821015610cb657610cb6610c53565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610ce457610ce4610c53565b500190565b6000816000190483118215151615610d0357610d03610c53565b500290565b600082610d2557634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220a47e7db70fdc4194e1f7164f2f585e3bd852be947520f4e08c9bd692da3b044664736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638a8c523c1161012e578063dd62ed3e116100ab578063f0b37c041161006f578063f0b37c0414610745578063f2fde38b14610765578063f708a64f14610785578063f887ea40146107a5578063fe9fbb80146107c557600080fd5b8063dd62ed3e1461067b578063df20fd49146106c1578063e01bb688146106e1578063e91f214e14610701578063e96fada21461072557600080fd5b8063a8aa1b31116100f2578063a8aa1b31146105db578063a9059cbb146105fb578063ad5c46481461061b578063b6a5d7de1461063b578063c558ae6b1461065b57600080fd5b80638a8c523c146105385780638aee81271461054d57806395d89b411461056d5780639d1944f51461059b578063a51af4c5146105bb57600080fd5b80633f4218e0116101bc57806365d43ac71161018057806365d43ac7146104765780636ddd1713146104965780636fcba377146104b057806370a08231146104d0578063893d20e81461050657600080fd5b80633f4218e0146103b55780634355855a146103e55780634ada218b14610415578063571ac8b014610436578063658d4b7f1461045657600080fd5b80632d48e896116102035780632d48e896146103135780632f54bf6e14610335578063313ce56714610364578063346cc7be14610380578063364333f4146103a057600080fd5b80630445b6671461024b57806306fdde0314610274578063095ea7b3146102ae57806318160ddd146102de57806323b872dd146102f357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026160165481565b6040519081526020015b60405180910390f35b34801561028057600080fd5b506040805180820190915260088152674c756e617469637360c01b60208201525b60405161026b9190611c7f565b3480156102ba57600080fd5b506102ce6102c9366004611cec565b6107e5565b604051901515815260200161026b565b3480156102ea57600080fd5b50600454610261565b3480156102ff57600080fd5b506102ce61030e366004611d18565b610852565b34801561031f57600080fd5b5061033361032e366004611d59565b610916565b005b34801561034157600080fd5b506102ce610350366004611d7b565b6000546001600160a01b0391821691161490565b34801561037057600080fd5b506040516009815260200161026b565b34801561038c57600080fd5b5061033361039b366004611d7b565b6109ae565b3480156103ac57600080fd5b50610333610b13565b3480156103c157600080fd5b506102ce6103d0366004611d7b565b60076020526000908152604090205460ff1681565b3480156103f157600080fd5b506102ce610400366004611d7b565b60086020526000908152604090205460ff1681565b34801561042157600080fd5b506011546102ce90600160a01b900460ff1681565b34801561044257600080fd5b506102ce610451366004611d7b565b610b6b565b34801561046257600080fd5b50610333610471366004611da6565b610b79565b34801561048257600080fd5b50610333610491366004611ddf565b610bc9565b3480156104a257600080fd5b506015546102ce9060ff1681565b3480156104bc57600080fd5b506103336104cb366004611e65565b610c71565b3480156104dc57600080fd5b506102616104eb366004611d7b565b6001600160a01b031660009081526005602052604090205490565b34801561051257600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161026b565b34801561054457600080fd5b50610333610d16565b34801561055957600080fd5b50610333610568366004611d7b565b610d55565b34801561057957600080fd5b50604080518082019091526005815264131d5b985560da1b60208201526102a1565b3480156105a757600080fd5b506103336105b6366004611e97565b610e44565b3480156105c757600080fd5b50601354610520906001600160a01b031681565b3480156105e757600080fd5b50601154610520906001600160a01b031681565b34801561060757600080fd5b506102ce610616366004611cec565b610ec0565b34801561062757600080fd5b50600354610520906001600160a01b031681565b34801561064757600080fd5b50610333610656366004611d7b565b610ecd565b34801561066757600080fd5b50610333610676366004611f86565b610f1e565b34801561068757600080fd5b50610261610696366004612048565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156106cd57600080fd5b506103336106dc366004612076565b611007565b3480156106ed57600080fd5b506103336106fc366004611d7b565b611043565b34801561070d57600080fd5b506102616fffffffffffffffffffffffffffffffff81565b34801561073157600080fd5b50600f54610520906001600160a01b031681565b34801561075157600080fd5b50610333610760366004611d7b565b61108a565b34801561077157600080fd5b50610333610780366004611d7b565b6110d5565b34801561079157600080fd5b506103336107a0366004611da6565b61116b565b3480156107b157600080fd5b50601054610520906001600160a01b031681565b3480156107d157600080fd5b506102ce6107e0366004611d7b565b61126f565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108409086815260200190565b60405180910390a35060015b92915050565b6004546001600160a01b0384166000908152600660209081526040808320338452909152812054909114610901576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526006825283812033825290915291909120546108dc91849061128d565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b61090c8484846112b9565b90505b9392505050565b61091f3361126f565b6109445760405162461bcd60e51b815260040161093b90612094565b60405180910390fd5b6012546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561099257600080fd5b505af11580156109a6573d6000803e3d6000fd5b505050505050565b6109b73361126f565b6109d35760405162461bcd60e51b815260040161093b90612094565b306001600160a01b03821603610a2b5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74207769746864726177206e617469766520746f6b656e00000000604482015260640161093b565b6040516370a0823160e01b815230600482015281906001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9f91906120bc565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e91906120d5565b505050565b610b1c3361126f565b610b385760405162461bcd60e51b815260040161093b90612094565b6040514790339082156108fc029083906000818181858888f19350505050158015610b67573d6000803e3d6000fd5b5050565b600061084c826004546107e5565b610b823361126f565b610b9e5760405162461bcd60e51b815260040161093b90612094565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610bd23361126f565b610bee5760405162461bcd60e51b815260040161093b90612094565b60005b82811015610c6b57610c29848483818110610c0e57610c0e6120f2565b9050602002016020810190610c239190611d7b565b8361116b565b610c59848483818110610c3e57610c3e6120f2565b9050602002016020810190610c539190611d7b565b83610b79565b80610c638161211e565b915050610bf1565b50505050565b610c7a3361126f565b610c965760405162461bcd60e51b815260040161093b90612094565b6009849055600a839055600b829055600c819055610cc081610cba8481888861161d565b9061161d565b600d8190556109c41015610c6b5760405162461bcd60e51b815260206004820152601a60248201527f46656573206d757374206265206c657373207468616e20323525000000000000604482015260640161093b565b6000546001600160a01b03163314610d405760405162461bcd60e51b815260040161093b90612137565b6011805460ff60a01b1916600160a01b179055565b610d5e3361126f565b610d7a5760405162461bcd60e51b815260040161093b90612094565b6001600160a01b038116610dc25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161093b565b601254604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b5050600280546001600160a01b0319166001600160a01b0394909416939093179092555050565b610e4d3361126f565b610e695760405162461bcd60e51b815260040161093b90612094565b620b71b08110610ebb5760405162461bcd60e51b815260206004820152601860248201527f496e617070726f7072696174652067617320616d6f756e740000000000000000604482015260640161093b565b601455565b600061090f3384846112b9565b6000546001600160a01b03163314610ef75760405162461bcd60e51b815260040161093b90612137565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610f273361126f565b610f435760405162461bcd60e51b815260040161093b90612094565b8051825114610fab5760405162461bcd60e51b815260206004820152602e60248201527f41697264726f703a2061646472657373657320616e6420616d6f756e7473206c60448201526d0cadccee8d040dad2e6dac2e8c6d60931b606482015260840161093b565b60005b8251811015610b0e57610ff433848381518110610fcd57610fcd6120f2565b6020026020010151848481518110610fe757610fe76120f2565b6020026020010151611629565b5080610fff8161211e565b915050610fae565b6110103361126f565b61102c5760405162461bcd60e51b815260040161093b90612094565b6015805460ff191692151592909217909155601655565b61104c3361126f565b6110685760405162461bcd60e51b815260040161093b90612094565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110b45760405162461bcd60e51b815260040161093b90612137565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146110ff5760405162461bcd60e51b815260040161093b90612137565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b6111743361126f565b6111905760405162461bcd60e51b815260040161093b90612094565b6001600160a01b03821630148015906111b757506011546001600160a01b03838116911614155b6111c057600080fd5b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561122657601254604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610978565b6012546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610978565b6001600160a01b031660009081526001602052604090205460ff1690565b600081848411156112b15760405162461bcd60e51b815260040161093b9190611c7f565b505050900390565b600080546001600160a01b0385811691161461131e57601154600160a01b900460ff1661131e5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b604482015260640161093b565b60175460ff161561133b57611334848484611629565b905061090f565b6011546001600160a01b0385811691161480159061136757506011546001600160a01b03848116911614155b1561137757611334848484611629565b61137f6116fd565b1561138c5761138c61174e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600590915291909120546113de91849061128d565b6001600160a01b0385166000908152600560205260408120919091556114048585611aa8565b61140e5782611418565b6114188584611afc565b6001600160a01b03851660009081526005602052604090205490915061143e908261161d565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff166114e2576012546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156114cf57600080fd5b505af19250505080156114e0575060015b505b6001600160a01b03841660009081526008602052604090205460ff16611573576012546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561156057600080fd5b505af1925050508015611571575060015b505b6012546014546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916115ab9160040190815260200190565b600060405180830381600087803b1580156115c557600080fd5b505af19250505080156115d6575060015b50836001600160a01b0316856001600160a01b031660008051602061226a8339815191528360405161160a91815260200190565b60405180910390a3506001949350505050565b600061090f828461215a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260059091529182205461167a91849061128d565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546116a9908361161d565b6001600160a01b03808516600081815260056020526040908190209390935591519086169060008051602061226a833981519152906116eb9086815260200190565b60405180910390a35060019392505050565b6011546000906001600160a01b0316331480159061171e575060175460ff16155b801561172c575060155460ff165b801561174957506016543060009081526005602052604090205410155b905090565b6017805460ff19166001179055600d546009546016546000926117819260029261177b9291839190611c5b565b90611c67565b9050600061179a82601654611c7390919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106117d4576117d46120f2565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611805576118056120f2565b6001600160a01b03928316602091820292909201015260105460405163791ac94760e01b81524792919091169063791ac9479061184f908690600090879030904290600401612172565b600060405180830381600087803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b5050505060006118968247611c7390919063ffffffff16565b905060006118bc6118b36002600954611c6790919063ffffffff16565b600d5490611c73565b905060006118de600261177b8461177b60095488611c5b90919063ffffffff16565b905060006118fb8361177b600a5487611c5b90919063ffffffff16565b905060006119188461177b600b5488611c5b90919063ffffffff16565b9050601260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561196a57600080fd5b505af19350505050801561197c575060015b50600f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119b7573d6000803e3d6000fd5b508815611a93576010546000805460405163f305d71960e01b8152306004820152602481018d90526044810183905260648101929092526001600160a01b0390811660848301524260a48301529091169063f305d71990859060c40160606040518083038185885af1158015611a31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a5691906121e3565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506017805460ff1916905550505050505050565b6001600160a01b03821660009081526007602052604081205460ff1680611ae757506001600160a01b03821660009081526007602052604090205460ff165b15611af45750600061084c565b50600161084c565b600080611b1f600e5461177b600c54600d54611b189190612211565b8690611c5b565b90506000611b3e600e5461177b600c5487611c5b90919063ffffffff16565b30600090815260056020526040902054909150611b5b908361161d565b30600081815260056020526040908190209290925590516001600160a01b0387169060008051602061226a83398151915290611b9a9086815260200190565b60405180910390a361dead60005260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba54611bd9908261161d565b61dead600081905260056020527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba919091556040516001600160a01b0387169060008051602061226a83398151915290611c369085815260200190565b60405180910390a3611c52611c4b828461215a565b8590611c73565b95945050505050565b600061090f8284612228565b600061090f8284612247565b600061090f8284612211565b600060208083528351808285015260005b81811015611cac57858101830151858201604001528201611c90565b81811115611cbe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611ce957600080fd5b50565b60008060408385031215611cff57600080fd5b8235611d0a81611cd4565b946020939093013593505050565b600080600060608486031215611d2d57600080fd5b8335611d3881611cd4565b92506020840135611d4881611cd4565b929592945050506040919091013590565b60008060408385031215611d6c57600080fd5b50508035926020909101359150565b600060208284031215611d8d57600080fd5b813561090f81611cd4565b8015158114611ce957600080fd5b60008060408385031215611db957600080fd5b8235611dc481611cd4565b91506020830135611dd481611d98565b809150509250929050565b600080600060408486031215611df457600080fd5b833567ffffffffffffffff80821115611e0c57600080fd5b818601915086601f830112611e2057600080fd5b813581811115611e2f57600080fd5b8760208260051b8501011115611e4457600080fd5b60209283019550935050840135611e5a81611d98565b809150509250925092565b60008060008060808587031215611e7b57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611ea957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611eef57611eef611eb0565b604052919050565b600067ffffffffffffffff821115611f1157611f11611eb0565b5060051b60200190565b600082601f830112611f2c57600080fd5b81356020611f41611f3c83611ef7565b611ec6565b82815260059290921b84018101918181019086841115611f6057600080fd5b8286015b84811015611f7b5780358352918301918301611f64565b509695505050505050565b60008060408385031215611f9957600080fd5b823567ffffffffffffffff80821115611fb157600080fd5b818501915085601f830112611fc557600080fd5b81356020611fd5611f3c83611ef7565b82815260059290921b84018101918181019089841115611ff457600080fd5b948201945b8386101561201b57853561200c81611cd4565b82529482019490820190611ff9565b9650508601359250508082111561203157600080fd5b5061203e85828601611f1b565b9150509250929050565b6000806040838503121561205b57600080fd5b823561206681611cd4565b91506020830135611dd481611cd4565b6000806040838503121561208957600080fd5b8235611d0a81611d98565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156120ce57600080fd5b5051919050565b6000602082840312156120e757600080fd5b815161090f81611d98565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161213057612130612108565b5060010190565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000821982111561216d5761216d612108565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121c25784516001600160a01b03168352938301939183019160010161219d565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156121f857600080fd5b8351925060208401519150604084015190509250925092565b60008282101561222357612223612108565b500390565b600081600019048311821515161561224257612242612108565b500290565b60008261226457634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122097c240b7cc7ba84e4e9fc544e5527d3e33df62fb4013bb4b4d1e09a31536452364736f6c634300080f0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.