ETH Price: $2,908.53 (+3.16%)
 

Overview

Max Total Supply

100,000,000,000 IIFTT

Holders

39

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
IIFTT

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : iiftt.sol
// _ _                                                                                                 _ _ 
// | | |_____ _____    _____ _____    _____ _____ _____    _____ _____ _____    _____ _____ _____ _____| | |
// |_|_|     |   | |  |     |_   _|  |   __|     | __  |  |_   _|  |  |   __|  |_   _|   __|     |  |  |_|_|
//     |-   -| | | |  |-   -| | |    |   __|  |  |    -|    | | |     |   __|    | | |   __|   --|     |    
//     |_____|_|___|  |_____| |_|    |__|  |_____|__|__|    |_| |__|__|_____|    |_| |_____|_____|__|__|    


// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@%%@@@@#%@@@@@@@@@@@%#@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@%%@@@@@@@@@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@%%@#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@
// @@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@
// @@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@%@@@@%@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@@@@@%*%@%@@@@@@@@@@
// @@@@@@@@%@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@%%@@@@@@@@
// @@@@@@@%@@@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@%@@@@@@@
// @@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@%@@@@@@
// @@@@@%@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%###%%%%%%%%%%%%%%%%@@%@@@@@
// @@@@%@@@@@@%%@@@@@@@#%#*#%@@@@@+=--:::::::::::::::-=%@@@@*+=----------------------=#%%@@@@
// @@@#@@@@@@@@%**@@@@%+--=*@@@@#=-:....==---:::::::::----------:...................::-#@#@@@
// @@%@@@@@@@#+-==@@*=::.:=*@@@*=-:......--:...................:-:.::::........:::::::-=+%%@@
// @@%@@@@%*-:.:-=@#=-...:=*@%+=-:...::----=-:..................:---=+=-:....:-+++++++++++%@@
// @#@@@@@=-:...-=@%-:...:=*%#==:....#%%@@@*====---:....:---===-===+=%@=-:..:-=@@@@@@@@@@@@%@
// @#@@@@@=-....-=@%-:...:=#@#==:....%@@@@@@@@@@@@*-:...--%@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@#@
// %%@@@@@=-....-=@%-:...:-#@#==:....+********#@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@%@
// #@@@@@@=-....-=@%-:...:-#@#==:...........:-#@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@%
// #@@@@@@=-....-=@%-:...:-#@#==:...........=@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@%
// #@@@@@@=-....-=@#-:...:-#@#=-:.....:----*@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@#
// #@@@@@@=-....-=@%=:...:-#@#=-:....#%#%%%@@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@%
// #@@@@@@=-....-=@%=:...:-#@#=-:....@@@@@@@@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=%@@@@@@@@@@@@%
// %%@@@@@=-....-=@%=:...:-#@*=-:....@@@@@@@@@@@@@*=:...--%@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@%%
// @#@@@@@=-....-=@%=:...:-#@*=-:....%@@@@@@@@@@@@*=:...--@@%@@@@@@@@@@=-:..:-=@@@%@@@@@@@@#@
// @#@@@@@=-....-=@#=:...:-#@*=-:...:@@@@@@@@@@@@@*=:...--%@@@@@@@@%@@@=-:..:-=@@@%%@@@@@@@%@
// @@%@@@@=-....-=%#=:...:=#@*==-::::%@@@@@@@@@@@@*=:...--@@@@@@@@@@%@@=-:..:-=@@@@@@@@@@@%@@
// @@%@@@@=-....-=@%=:.:-=*%@%*******@@@@@@@@@@@@@*=:...--@@@@@@@@@@@@@#+=-::-=@@@@@@@@@@@%@@
// @@@#@@@=-..:-+*@%===+*%@@@@@@@@@@@@@@@@@@%@@@%%#+=:::--@@@@@@@@@@@@@@@%*====%@@@@@@@@@%@@@
// @@@@%@*==-=+#@@@%+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+=-=-@@@@@@@@@%@@@@#@@%#+=@%@@@@@@@%@@@@
// @@@@@%@+**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=@@@@@@@@@@@@@@@@@@@@@@@%@@@@@%@@@@@
// @@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@
// @@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@%@@@@@@@
// @@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@
// @@@@@@@@@@%@@#@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@%@@@@%@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@
// @@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@
// @@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@%@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@#@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@%#@@@@@@@@@@@@%@@@@%%@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

// Website: https://www.initforthetech.xyz/

// TG: https://t.me/iifttoneth

// Twitter: https://twitter.com/init4dtech

// Docs:https://whitepaper.initforthetech.xyz/

// SPDX-License-Identifier: MIT


pragma solidity 0.8.25;

library SafeMath {
    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 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 {
            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 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 circulatingSupply() 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 Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

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

contract IIFTT is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "In it for the tech";
    string private constant _symbol = "IIFTT";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply = 100_000_000_000 * (10 ** _decimals);
    uint256 private _maxWalletToken = (_totalSupply * 100) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public isExemptFromLimits;
    mapping(address => bool) public isContractDividendAllowed;
    bool private tradingOpen = false;
    uint256 private startTime = 0;
    uint256 private deltaEnd = 10 minutes;
    IRouter router;
    address public pair;
    uint256 private buyFee = 500;
    uint256 private sellFee = 500;
    uint256 private initFee = 2500;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    uint256 public swapCounterTrigger = 5;
    bool private swapEnabled = true;
    uint256 public swapTimes;
    bool private swapping;
    uint256 public excessDividends;
    uint256 private swapThreshold = (_totalSupply * 100) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 10) / 100000;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }
    bool public autoRewards = true;
    bool public blacklistRevoked = false;
    bool public saveEthRevoked =  false;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public currentDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    mapping(address => bool)  public blacklist;
    uint256 internal currentIndex;
    uint256 public minPeriod = 12 hours; // min time for eth reward
    uint256 public minDistribution = 1 * (10 ** 9);
    uint256 public distributorGas = 500000;

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0x0B2e30f0b8F92ec8faA9b99ab97cE27DA31fdD54;


    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

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

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

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

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

    function isContract(address addr) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(blacklist[sender] == false && blacklist[recipient] == false ,"User is blacklisted");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );

    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);
        checkMaxWallet(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        distributeDividend(msg.sender);
        swapbackCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        processShares(sender, recipient);
    }

    function setStructure(
        uint256 _buy,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        buyFee = _buy;
        sellFee = _sell;
        transferFee = _trans;
        require(
            buyFee <= denominator.div(5) &&
                sellFee <= denominator.div(8) &&
                transferFee <= denominator.div(8),
            "buyFee and sellFee cannot be more than 20%"
        );
    }

    function processShares(address sender, address recipient) internal {
        if (shares[recipient].amount > 0 && autoRewards) {
            distributeDividend(recipient);
        }
        if (!isDividendExempt[sender] && recipient == pair && shares[sender].amount > 0) {
            distributeDividend(sender);
        }
        if (!isDividendExempt[sender]) {
            setShare(sender, balanceOf(sender));
        }
        if (!isDividendExempt[recipient]) {
            setShare(recipient, balanceOf(recipient));
        }
        if (isContract(sender) && !isContractDividendAllowed[sender]) {
            setShare(sender, uint256(0));
        }
        if (isContract(recipient) && !isContractDividendAllowed[recipient]) {
            setShare(recipient, uint256(0));
        }
        if (autoRewards) {
            process(distributorGas);
        }
    }

    function manuallyProcessReward() external onlyOwner {
        process(distributorGas.mul(uint256(2)));
    }

    function setParameters(
    uint256 _buy,
    uint256 _trans,
    bool _removeLimit
) external onlyOwner {
    if (_removeLimit) {
        _maxWalletToken = totalSupply(); // Set max wallet to total supply
    } else {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(
            newTx >= limit && newTransfer >= limit,
            "Max TXs cannot be less than 0.5%"
        );
    }
}



    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            block.timestamp - startTime <= 10 minutes &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD) &&
            !isExemptFromLimits[recipient]
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapbackCounters(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function shouldSwapBack(
        address sender,
        address recipient,
        uint256 amount
    ) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            aboveMin &&
            !isFeeExempt[sender] &&
            recipient == pair &&
            swapTimes >= swapCounterTrigger &&
            aboveThreshold;
    }

    function swapAndSendToMarketing(uint256 tokenAmount) private {
    uint256 initialBalance = address(this).balance;
    swapTokensForETH(tokenAmount);
    uint256 deltaBalance = address(this).balance.sub(initialBalance);
    if (deltaBalance > 0) {
        payable(marketingWallet).transfer(deltaBalance);
    }
}

    function swapBack(
    address sender,
    address recipient,
    uint256 amount
) internal {
    if (shouldSwapBack(sender, recipient, amount)) {
        uint256 bal = balanceOf(address(this));
        if (bal >= (_totalSupply * 1) / 100) {
            bal = (_totalSupply * 1) / 100;
        }
        swapAndSendToMarketing(bal);  // Swap and send tokens to marketing wallet as ETH
        swapTimes = uint256(0);
    }
}


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


    function takeFee(
    address sender,
    address recipient,
    uint256 amount
) internal returns (uint256) {
    uint256 totalFee = getTotalFee(sender, recipient);
    if (totalFee > 0) {
        uint256 buyTaxAmount = 0;
        uint256 sellTaxAmount = 0;
        if (recipient == pair) {
            buyTaxAmount = amount.mul(buyFee).div(denominator);
        } else if (sender == pair) {
            sellTaxAmount = amount.mul(sellFee).div(denominator);
        }
        
        // Send buy tax to marketing wallet
        if (buyTaxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(buyTaxAmount);
            emit Transfer(sender, address(this), buyTaxAmount);
        }
        
        // Add sell tax to dividends
        if (sellTaxAmount > 0) {
            excessDividends = excessDividends.add(sellTaxAmount);
        }
        
        uint256 remainingAmount = amount.sub(buyTaxAmount).sub(sellTaxAmount);
        return remainingAmount;
    }
    return amount;
}


    
    function getTotalFee(
        address sender,
        address recipient
    ) public view returns (uint256) {
        uint256 endTime = startTime + deltaEnd ;
        if (endTime >= block.timestamp) {
          return initFee;
        } else {
            if (recipient == pair) {
                return sellFee;
            }
            if (sender == pair) {
                return buyFee;
            }
        }
        return transferFee;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setSwapCounterTrigger(
        uint256 _swapCounterTrigger
    ) external onlyOwner {
        swapCounterTrigger = _swapCounterTrigger;

    }

    function setExcess() external {
        payable(owner).transfer(excessDividends);
        currentDividends = currentDividends.sub(excessDividends);
        excessDividends = uint256(0);
    }

    function setisDividendExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            setShare(holder, 0);
        } else {
            setShare(holder, balanceOf(holder));
        }
    }

   /* function resetLimits() external onlyOwner {
    _maxWalletToken = _totalSupply;

}
*/

    function setisContractDividendAllowed(
        address holder,
        bool allowed
    ) external onlyOwner {
        isContractDividendAllowed[holder] = allowed;
        if (!allowed) {
            setShare(holder, 0);
        } else {
            setShare(holder, balanceOf(holder));
        }
    }

    function setShare(address shareholder, uint256 amount) internal {
        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(uint256 amountETH) internal {
        currentDividends += amountETH;
        totalDividends += amountETH;
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amountETH).div(totalShares)
        );
    }

    function process(uint256 gas) internal {
        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 rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function startTrading() external onlyOwner {
        require(!tradingOpen, "Trading already enabled");
        tradingOpen = true;
        startTime = block.timestamp;
    }

    function checkTradingAllowed(
        address sender,
        address recipient
    ) public view {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingOpen, "ERC20: Trading is not allowed");
            require(sender == pair || recipient == pair || block.timestamp - startTime >= 1 minutes,"transfers not allowed");
        }
    }


    function shouldDistribute(
        address shareholder
    ) public view returns (bool) {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(
        address _wallet
    ) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function viewShares(address shareholder) external view returns (uint256) {
        return shares[shareholder].amount;
    }

    function distributeDividend(address shareholder) internal {
    if (shares[shareholder].amount == 0) {
        return;
    }
    uint256 amount = getUnpaidEarnings(shareholder);
    if (amount > 0) {
        totalDistributed = totalDistributed.add(amount);
        payable(shareholder).transfer(amount);
        shareholderClaims[shareholder] = block.timestamp;
        shares[shareholder].totalRealised = shares[shareholder]
            .totalRealised
            .add(amount);
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
        currentDividends -= amount;
    }
}

function distributeDividendsFromExcess() internal {
    if (excessDividends > 0) {
        for (uint256 i = 0; i < shareholders.length; i++) {
            distributeDividend(shareholders[i]);
        }
        excessDividends = 0;
    }
}


    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 addBlacklist(address _address, bool _set) public onlyOwner {
        require(!blacklistRevoked,"blacklist has been revoked");
        blacklist[_address] = _set;
    }

    function saveEth() public onlyOwner {
        require(!saveEthRevoked,"saveEth has been revoked");
        payable(msg.sender).transfer(address(this).balance);
    }

    function revokeBlacklist() public onlyOwner {
        require(!blacklistRevoked, "already revoked");
        blacklistRevoked = true;
    }

    function revokeSaveEth() public onlyOwner {
        require(!saveEthRevoked, "already revoked");
        saveEthRevoked = true;
    }

    function airdrop(address [] memory _addressList, uint256 [] memory _inputList ) public onlyOwner {
        for(uint256 i = 0; i < _addressList.length; i++){
            transfer(_addressList[i], _inputList[i]);
        }
    }

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

     function setExemptFromLimits(address _address, bool _exempt) external onlyOwner {
        isExemptFromLimits[_address] = _exempt;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 _distributorGas
    ) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }

}

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

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":"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":"_address","type":"address"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256[]","name":"_inputList","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"checkTradingAllowed","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isContractDividendAllowed","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":"isExemptFromLimits","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":"manuallyProcessReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeSaveEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveEthRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"bool","name":"_removeLimit","type":"bool"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapCounterTrigger","type":"uint256"}],"name":"setSwapCounterTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setisContractDividendAllowed","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":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"shouldDistribute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapCounterTrigger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTimes","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":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"shareholder","type":"address"}],"name":"viewShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526100106012600a6104b9565b61001f9064174876e8006104ce565b600155612710600154606461003491906104ce565b61003e91906104e5565b6002556009805460ff199081169091555f600a819055610258600b556101f4600e819055600f556109c4601055601155612710601255600560135560148054909116600190811790915554620186a0906100999060646104ce565b6100a391906104e5565b601855620186a0600154600a6100b991906104ce565b6100c391906104e5565b601955601a805462ffffff191660011790556ec097ce7bc90715b34b9f100000000060205561a8c0602755633b9aca006028556207a120602955602a80546001600160a01b031916730b2e30f0b8f92ec8faa9b99ab97ce27da31fdd5417905534801561012e575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015610192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b69190610504565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610201573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102259190610504565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561026f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102939190610504565b600c80546001600160a01b038581166001600160a01b031992831617909255600d80548484169216919091178155305f818152600560209081526040808320805460ff19908116600190811790925533808652838620805483168417905596549097168452600683528184208054881682179055858452818420805488168217905593835280832080548716851790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716851790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909616841790955591548382526003835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505061052a565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561041157815f19048211156103f7576103f76103c3565b8085161561040457918102915b93841c93908002906103dc565b509250929050565b5f82610427575060016104b3565b8161043357505f6104b3565b816001811461044957600281146104535761046f565b60019150506104b3565b60ff841115610464576104646103c3565b50506001821b6104b3565b5060208310610133831016604e8410600b8410161715610492575081810a6104b3565b61049c83836103d7565b805f19048211156104af576104af6103c3565b0290505b92915050565b5f6104c760ff841683610419565b9392505050565b80820281158282048414176104b3576104b36103c3565b5f826104ff57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610514575f80fd5b81516001600160a01b03811681146104c7575f80fd5b612c43806105375f395ff3fe608060405260043610610374575f3560e01c8063893d20e8116101c8578063c0cbdea4116100fd578063e2d2e2191161009d578063efca2eed1161006d578063efca2eed14610a8e578063f2fde38b14610aa3578063f9f92be414610ac2578063ffd49c8414610af0575f80fd5b8063e2d2e21914610a07578063e3a61e0f14610a1c578063e46e238014610a50578063ef43b02b14610a6f575f80fd5b8063ce7c2ac2116100d8578063ce7c2ac214610931578063d2d55dde14610986578063dd62ed3e146109a5578063e27ab62e146109e9575f80fd5b8063c0cbdea4146108ad578063ca89b899146108cc578063cd2c6a9914610903575f80fd5b8063a13d1a2b11610168578063ac3f0b8c11610143578063ac3f0b8c14610850578063aef9098814610864578063b1ba841114610883578063c0c4939414610898575f80fd5b8063a13d1a2b146107f3578063a8aa1b3114610812578063a9059cbb14610831575f80fd5b80639358928b116101a35780639358928b146107895780639528432b1461079d57806395d89b41146107b1578063997664d7146107de575f80fd5b8063893d20e81461072f5780638c21cd521461074b5780638cd4426d1461076a575f80fd5b8063313ce567116102a95780634fab0ae81161024957806369d814681161021957806369d81468146106a157806370a08231146106ba57806375f0a874146106d957806376a9cb7d14610710575f80fd5b80634fab0ae81461064457806353d821721461065957806360e719621461066d5780636724348214610682575f80fd5b80633f4218e0116102845780633f4218e0146105b557806340c7f727146105e35780634355855a146105f757806348ff2b8b14610625575f80fd5b8063313ce567146105715780633773eafb1461058c5780633a98ef39146105a0575f80fd5b80631de3585c1161031457806328fd3198116102ef57806328fd3198146104fc578063293230b81461051b5780632f54bf6e1461052f57806330488a551461055c575f80fd5b80631de3585c1461049057806323b872dd146104af57806325e30cc9146104ce575f80fd5b80630ca61cb11161034f5780630ca61cb11461041d578063178f30161461043e57806317ca2e411461045d57806318160ddd1461047c575f80fd5b806306fdde031461037f57806308e20e1f146103cb578063095ea7b3146103ee575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50604080518082019091526012815271092dc40d2e840ccdee440e8d0ca40e8cac6d60731b60208201525b6040516103c2919061272c565b60405180910390f35b3480156103d6575f80fd5b506103e0601d5481565b6040519081526020016103c2565b3480156103f9575f80fd5b5061040d610408366004612775565b610b05565b60405190151581526020016103c2565b348015610428575f80fd5b5061043c61043736600461279f565b610b1b565b005b348015610449575f80fd5b50601a5461040d9062010000900460ff1681565b348015610468575f80fd5b5061043c6104773660046127d5565b610b5b565b348015610487575f80fd5b506001546103e0565b34801561049b575f80fd5b5061043c6104aa3660046127d5565b610c06565b3480156104ba575f80fd5b5061040d6104c936600461280c565b610c77565b3480156104d9575f80fd5b5061040d6104e836600461284a565b60086020525f908152604090205460ff1681565b348015610507575f80fd5b506103e061051636600461284a565b610cdf565b348015610526575f80fd5b5061043c610d65565b34801561053a575f80fd5b5061040d61054936600461284a565b5f546001600160a01b0391821691161490565b348015610567575f80fd5b506103e060155481565b34801561057c575f80fd5b50604051601281526020016103c2565b348015610597575f80fd5b5061043c610df4565b3480156105ab575f80fd5b506103e0601b5481565b3480156105c0575f80fd5b5061040d6105cf36600461284a565b60056020525f908152604090205460ff1681565b3480156105ee575f80fd5b5061043c610e45565b348015610602575f80fd5b5061040d61061136600461284a565b60066020525f908152604090205460ff1681565b348015610630575f80fd5b5061043c61063f3660046127d5565b610ec9565b34801561064f575f80fd5b506103e060285481565b348015610664575f80fd5b5061043c610f1c565b348015610678575f80fd5b506103e060295481565b34801561068d575f80fd5b5061043c61069c366004612939565b610fa3565b3480156106ac575f80fd5b50601a5461040d9060ff1681565b3480156106c5575f80fd5b506103e06106d436600461284a565b611021565b3480156106e4575f80fd5b50602a546106f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c2565b34801561071b575f80fd5b5061043c61072a3660046129f5565b61103b565b34801561073a575f80fd5b505f546001600160a01b03166106f8565b348015610756575f80fd5b5061040d61076536600461284a565b611069565b348015610775575f80fd5b5061043c610784366004612775565b6110ad565b348015610794575f80fd5b506103e0611144565b3480156107a8575f80fd5b5061043c611173565b3480156107bc575f80fd5b50604080518082019091526005815264125251951560da1b60208201526103b5565b3480156107e9575f80fd5b506103e0601c5481565b3480156107fe575f80fd5b5061043c61080d3660046127d5565b611221565b34801561081d575f80fd5b50600d546106f8906001600160a01b031681565b34801561083c575f80fd5b5061040d61084b366004612775565b611274565b34801561085b575f80fd5b5061043c611280565b34801561086f575f80fd5b5061043c61087e366004612a0c565b6112c2565b34801561088e575f80fd5b506103e060135481565b3480156108a3575f80fd5b506103e060175481565b3480156108b8575f80fd5b5061043c6108c736600461279f565b6113df565b3480156108d7575f80fd5b506103e06108e636600461284a565b6001600160a01b03165f9081526024602052604090206002015490565b34801561090e575f80fd5b5061040d61091d36600461284a565b60076020525f908152604090205460ff1681565b34801561093c575f80fd5b5061096b61094b36600461284a565b60246020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103c2565b348015610991575f80fd5b506103e06109a0366004612a0c565b6114bf565b3480156109b0575f80fd5b506103e06109bf366004612a0c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156109f4575f80fd5b50601a5461040d90610100900460ff1681565b348015610a12575f80fd5b506103e0601f5481565b348015610a27575f80fd5b506103e0610a3636600461284a565b6001600160a01b03165f9081526024602052604090205490565b348015610a5b575f80fd5b5061043c610a6a366004612a38565b61152f565b348015610a7a575f80fd5b5061043c610a893660046127d5565b611638565b348015610a99575f80fd5b506103e0601e5481565b348015610aae575f80fd5b5061043c610abd36600461284a565b611697565b348015610acd575f80fd5b5061040d610adc36600461284a565b60256020525f908152604090205460ff1681565b348015610afb575f80fd5b506103e060275481565b5f610b11338484611713565b5060015b92915050565b5f546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b4490612a6e565b60405180910390fd5b602792909255602855602955565b5f546001600160a01b03163314610b845760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610bdc5760405162461bcd60e51b815260206004820152601a60248201527f626c61636b6c69737420686173206265656e207265766f6b65640000000000006044820152606401610b44565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600860205260409020805460ff191682151517905580610c6557610c61825f611836565b5050565b610c6182610c7284611021565b611836565b5f610c83848484611969565b610cd48433610ccf85604051806060016040528060288152602001612be6602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190611a93565b611713565b5060015b9392505050565b6001600160a01b0381165f908152602460205260408120548103610d0457505f919050565b6001600160a01b0382165f90815260246020526040812054610d2590611abe565b6001600160a01b0384165f90815260246020526040902060010154909150808211610d5357505f9392505050565b610d5d8282611ada565b949350505050565b5f546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610b4490612a6e565b60095460ff1615610de15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610b44565b6009805460ff1916600117905542600a55565b5f80546017546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015610e2c573d5f803e3d5ffd5b50601754601d54610e3c91611ada565b601d555f601755565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610eb85760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805461ff001916610100179055565b5f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f455760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff1615610f905760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805462ff0000191662010000179055565b5f546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610b4490612a6e565b5f5b825181101561101c57611013838281518110610fec57610fec612a8e565b602002602001015183838151811061100657611006612a8e565b6020026020010151611274565b50600101610fce565b505050565b6001600160a01b03165f9081526003602052604090205490565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610b4490612a6e565b601355565b6027546001600160a01b0382165f90815260236020526040812054909142916110929190612ab6565b108015610b1557506028546110a683610cdf565b1192915050565b5f546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4490612a6e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611120573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101c9190612ac9565b5f61116e6111515f611021565b61116861115f61dead611021565b60015490611ada565b90611ada565b905090565b5f546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff16156111f55760405162461bcd60e51b815260206004820152601860248201527f7361766545746820686173206265656e207265766f6b656400000000000000006044820152606401610b44565b60405133904780156108fc02915f818181858888f1935050505015801561121e573d5f803e3d5ffd5b50565b5f546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f610b11338484611969565b5f546001600160a01b031633146112a95760405162461bcd60e51b8152600401610b4490612a6e565b6029546112c0906112bb906002611ae5565b611af0565b565b6001600160a01b0382165f9081526005602052604090205460ff1615801561130257506001600160a01b0381165f9081526005602052604090205460ff16155b15610c615760095460ff166113595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b44565b600d546001600160a01b03838116911614806113825750600d546001600160a01b038281169116145b8061139b5750603c600a54426113989190612ae4565b10155b610c615760405162461bcd60e51b81526020600482015260156024820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b6044820152606401610b44565b5f546001600160a01b031633146114085760405162461bcd60e51b8152600401610b4490612a6e565b600e839055600f8290556011819055601254611425906005611bd6565b600e5411158015611445575060125461143f906008611bd6565b600f5411155b8015611460575060125461145a906008611bd6565b60115411155b61101c5760405162461bcd60e51b815260206004820152602a60248201527f62757946656520616e642073656c6c4665652063616e6e6f74206265206d6f7260448201526965207468616e2032302560b01b6064820152608401610b44565b5f80600b54600a546114d19190612ab6565b90504281106114e4575050601054610b15565b600d546001600160a01b0390811690841603611504575050600f54610b15565b600d546001600160a01b0390811690851603611524575050600e54610b15565b505060115492915050565b5f546001600160a01b031633146115585760405162461bcd60e51b8152600401610b4490612a6e565b801561156957600154600255505050565b5f6127108461157760015490565b6115819190612af7565b61158b9190612b0e565b90505f6127108461159b60015490565b6115a59190612af7565b6115af9190612b0e565b90505f6115d26103e86115cc60056115c660015490565b90611ae5565b90611bd6565b90508083101580156115e45750808210155b6116305760405162461bcd60e51b815260206004820181905260248201527f4d6178205458732063616e6e6f74206265206c657373207468616e20302e35256044820152606401610b44565b505050505050565b5f546001600160a01b031633146116615760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600660205260409020805460ff19168215801591909117909155610c6557610c61825f611836565b5f546001600160a01b031633146116c05760405162461bcd60e51b8152600401610b4490612a6e565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166117755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b0382166117d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561185a57506001600160a01b0382165f90815260246020526040902054155b156118bf57602180546001600160a01b0384165f818152602260205260408120839055600183018455929092527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b03191690911790556118f1565b801580156118e357506001600160a01b0382165f9081526024602052604090205415155b156118f1576118f182611be1565b6001600160a01b0382165f90815260246020526040902054601b5461192191839161191b91611ada565b90611cf1565b601b556001600160a01b0382165f90815260246020526040902081905561194781611abe565b6001600160a01b039092165f9081526024602052604090206001019190915550565b611974838383611cfc565b61197f838383611f17565b61198983836112c2565b6119923361203f565b61199c838361214a565b6119a7838383612196565b6001600160a01b0383165f908152600360205260409020546119c99082611ada565b6001600160a01b0384165f908152600360205260408120919091556119ee8484612204565b6119f85781611a03565b611a03848484612248565b6001600160a01b0384165f90815260036020526040902054909150611a289082611cf1565b6001600160a01b038085165f8181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7b9085815260200190565b60405180910390a3611a8d848461237f565b50505050565b5f8184841115611ab65760405162461bcd60e51b8152600401610b44919061272c565b505050900390565b5f610b156020546115cc601f5485611ae590919063ffffffff16565b5f610cd88284612ae4565b5f610cd88284612af7565b6021545f819003611aff575050565b5f805a90505f5b8483108015611b1457508381105b15611bcf578360265410611b27575f6026555b611b58602160265481548110611b3f57611b3f612a8e565b5f918252602090912001546001600160a01b0316611069565b15611b8e57611b8e602160265481548110611b7557611b75612a8e565b5f918252602090912001546001600160a01b031661203f565b611ba3611b9c5a8490611ada565b8490611cf1565b92505a602680549193505f611bb783612b2d565b91905055508080611bc790612b2d565b915050611b06565b5050505050565b5f610cd88284612b0e565b60218054611bf190600190612ae4565b81548110611c0157611c01612a8e565b5f9182526020808320909101546001600160a01b0384811684526022909252604090922054602180549290931692918110611c3e57611c3e612a8e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260229182905260408120546021805491939291611c8990600190612ae4565b81548110611c9957611c99612a8e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020556021805480611cce57611cce612b45565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610cd88284612ab6565b6001600160a01b0383165f9081526025602052604090205460ff16158015611d3c57506001600160a01b0382165f9081526025602052604090205460ff16155b611d7e5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610b44565b6001600160a01b038316611de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b5f8111611ea55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b611eae83611021565b81111561101c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b44565b610258600a5442611f289190612ae4565b11158015611f4e57506001600160a01b0383165f9081526005602052604090205460ff16155b8015611f7257506001600160a01b0382165f9081526005602052604090205460ff16155b8015611f8c5750600d546001600160a01b03838116911614155b8015611fa357506001600160a01b03821661dead14155b8015611fc757506001600160a01b0382165f9081526007602052604090205460ff16155b1561101c576002546001600160a01b0383165f90815260036020526040902054611ff19083611cf1565b111561101c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b44565b6001600160a01b0381165f9081526024602052604081205490036120605750565b5f61206a82610cdf565b90508015610c6157601e5461207f9082611cf1565b601e556040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156120b5573d5f803e3d5ffd5b506001600160a01b0382165f90815260236020908152604080832042905560249091529020600201546120e89082611cf1565b6001600160a01b0383165f90815260246020526040902060028101919091555461211190611abe565b6001600160a01b0383165f90815260246020526040812060010191909155601d8054839290612141908490612ae4565b90915550505050565b600d546001600160a01b03828116911614801561217f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c6157600160155f8282546121419190612ab6565b6121a18383836124f6565b1561101c575f6121b030611021565b9050606460015460016121c39190612af7565b6121cd9190612b0e565b81106121f157606460015460016121e49190612af7565b6121ee9190612b0e565b90505b6121fa81612590565b505f601555505050565b6001600160a01b0382165f9081526005602052604081205460ff16158015610cd85750506001600160a01b03165f9081526005602052604090205460ff1615919050565b5f8061225485856114bf565b9050801561237657600d545f9081906001600160a01b0390811690871603612298576122916012546115cc600e5488611ae590919063ffffffff16565b91506122cc565b600d546001600160a01b03908116908816036122cc576122c96012546115cc600f5488611ae590919063ffffffff16565b90505b811561234457305f908152600360205260409020546122eb9083611cf1565b305f81815260036020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061233b9086815260200190565b60405180910390a35b801561235b576017546123579082611cf1565b6017555b5f61236a826111688886611ada565b9450610cd89350505050565b50909392505050565b6001600160a01b0381165f90815260246020526040902054158015906123a75750601a5460ff165b156123b5576123b58161203f565b6001600160a01b0382165f9081526006602052604090205460ff161580156123ea5750600d546001600160a01b038281169116145b801561240c57506001600160a01b0382165f9081526024602052604090205415155b1561241a5761241a8261203f565b6001600160a01b0382165f9081526006602052604090205460ff166124465761244682610c7284611021565b6001600160a01b0381165f9081526006602052604090205460ff166124725761247281610c7283611021565b813b1515801561249a57506001600160a01b0382165f9081526008602052604090205460ff16155b156124a9576124a9825f611836565b803b151580156124d157506001600160a01b0381165f9081526008602052604090205460ff16155b156124e0576124e0815f611836565b601a5460ff1615610c6157610c61602954611af0565b5f8060195483101590505f60185461250d30611021565b601654911115915060ff16158015612527575060145460ff165b80156125305750815b801561255457506001600160a01b0386165f9081526005602052604090205460ff16155b801561256d5750600d546001600160a01b038681169116145b801561257d575060135460155410155b80156125865750805b9695505050505050565b4761259a826125e4565b5f6125a54783611ada565b9050801561101c57602a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611a8d573d5f803e3d5ffd5b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061261757612617612a8e565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561266e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126929190612b59565b816001815181106126a5576126a5612a8e565b6001600160a01b039283166020918202929092010152600c546126cb9130911684611713565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906127039085905f90869030904290600401612b74565b5f604051808303815f87803b15801561271a575f80fd5b505af1158015611630573d5f803e3d5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461121e575f80fd5b5f8060408385031215612786575f80fd5b823561279181612761565b946020939093013593505050565b5f805f606084860312156127b1575f80fd5b505081359360208301359350604090920135919050565b801515811461121e575f80fd5b5f80604083850312156127e6575f80fd5b82356127f181612761565b91506020830135612801816127c8565b809150509250929050565b5f805f6060848603121561281e575f80fd5b833561282981612761565b9250602084013561283981612761565b929592945050506040919091013590565b5f6020828403121561285a575f80fd5b8135610cd881612761565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128a2576128a2612865565b604052919050565b5f67ffffffffffffffff8211156128c3576128c3612865565b5060051b60200190565b5f82601f8301126128dc575f80fd5b813560206128f16128ec836128aa565b612879565b8083825260208201915060208460051b870101935086841115612912575f80fd5b602086015b8481101561292e5780358352918301918301612917565b509695505050505050565b5f806040838503121561294a575f80fd5b823567ffffffffffffffff80821115612961575f80fd5b818501915085601f830112612974575f80fd5b813560206129846128ec836128aa565b82815260059290921b840181019181810190898411156129a2575f80fd5b948201945b838610156129c95785356129ba81612761565b825294820194908201906129a7565b965050860135925050808211156129de575f80fd5b506129eb858286016128cd565b9150509250929050565b5f60208284031215612a05575f80fd5b5035919050565b5f8060408385031215612a1d575f80fd5b8235612a2881612761565b9150602083013561280181612761565b5f805f60608486031215612a4a575f80fd5b83359250602084013591506040840135612a63816127c8565b809150509250925092565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b1557610b15612aa2565b5f60208284031215612ad9575f80fd5b8151610cd8816127c8565b81810381811115610b1557610b15612aa2565b8082028115828204841417610b1557610b15612aa2565b5f82612b2857634e487b7160e01b5f52601260045260245ffd5b500490565b5f60018201612b3e57612b3e612aa2565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612b69575f80fd5b8151610cd881612761565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc45784516001600160a01b031683529383019391830191600101612b9f565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fe64b0ac62fa8d65ea8f7b7235cc3eb2d7f53e54cdfdabc7e504fbe15369751b64736f6c63430008190033

Deployed Bytecode

0x608060405260043610610374575f3560e01c8063893d20e8116101c8578063c0cbdea4116100fd578063e2d2e2191161009d578063efca2eed1161006d578063efca2eed14610a8e578063f2fde38b14610aa3578063f9f92be414610ac2578063ffd49c8414610af0575f80fd5b8063e2d2e21914610a07578063e3a61e0f14610a1c578063e46e238014610a50578063ef43b02b14610a6f575f80fd5b8063ce7c2ac2116100d8578063ce7c2ac214610931578063d2d55dde14610986578063dd62ed3e146109a5578063e27ab62e146109e9575f80fd5b8063c0cbdea4146108ad578063ca89b899146108cc578063cd2c6a9914610903575f80fd5b8063a13d1a2b11610168578063ac3f0b8c11610143578063ac3f0b8c14610850578063aef9098814610864578063b1ba841114610883578063c0c4939414610898575f80fd5b8063a13d1a2b146107f3578063a8aa1b3114610812578063a9059cbb14610831575f80fd5b80639358928b116101a35780639358928b146107895780639528432b1461079d57806395d89b41146107b1578063997664d7146107de575f80fd5b8063893d20e81461072f5780638c21cd521461074b5780638cd4426d1461076a575f80fd5b8063313ce567116102a95780634fab0ae81161024957806369d814681161021957806369d81468146106a157806370a08231146106ba57806375f0a874146106d957806376a9cb7d14610710575f80fd5b80634fab0ae81461064457806353d821721461065957806360e719621461066d5780636724348214610682575f80fd5b80633f4218e0116102845780633f4218e0146105b557806340c7f727146105e35780634355855a146105f757806348ff2b8b14610625575f80fd5b8063313ce567146105715780633773eafb1461058c5780633a98ef39146105a0575f80fd5b80631de3585c1161031457806328fd3198116102ef57806328fd3198146104fc578063293230b81461051b5780632f54bf6e1461052f57806330488a551461055c575f80fd5b80631de3585c1461049057806323b872dd146104af57806325e30cc9146104ce575f80fd5b80630ca61cb11161034f5780630ca61cb11461041d578063178f30161461043e57806317ca2e411461045d57806318160ddd1461047c575f80fd5b806306fdde031461037f57806308e20e1f146103cb578063095ea7b3146103ee575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50604080518082019091526012815271092dc40d2e840ccdee440e8d0ca40e8cac6d60731b60208201525b6040516103c2919061272c565b60405180910390f35b3480156103d6575f80fd5b506103e0601d5481565b6040519081526020016103c2565b3480156103f9575f80fd5b5061040d610408366004612775565b610b05565b60405190151581526020016103c2565b348015610428575f80fd5b5061043c61043736600461279f565b610b1b565b005b348015610449575f80fd5b50601a5461040d9062010000900460ff1681565b348015610468575f80fd5b5061043c6104773660046127d5565b610b5b565b348015610487575f80fd5b506001546103e0565b34801561049b575f80fd5b5061043c6104aa3660046127d5565b610c06565b3480156104ba575f80fd5b5061040d6104c936600461280c565b610c77565b3480156104d9575f80fd5b5061040d6104e836600461284a565b60086020525f908152604090205460ff1681565b348015610507575f80fd5b506103e061051636600461284a565b610cdf565b348015610526575f80fd5b5061043c610d65565b34801561053a575f80fd5b5061040d61054936600461284a565b5f546001600160a01b0391821691161490565b348015610567575f80fd5b506103e060155481565b34801561057c575f80fd5b50604051601281526020016103c2565b348015610597575f80fd5b5061043c610df4565b3480156105ab575f80fd5b506103e0601b5481565b3480156105c0575f80fd5b5061040d6105cf36600461284a565b60056020525f908152604090205460ff1681565b3480156105ee575f80fd5b5061043c610e45565b348015610602575f80fd5b5061040d61061136600461284a565b60066020525f908152604090205460ff1681565b348015610630575f80fd5b5061043c61063f3660046127d5565b610ec9565b34801561064f575f80fd5b506103e060285481565b348015610664575f80fd5b5061043c610f1c565b348015610678575f80fd5b506103e060295481565b34801561068d575f80fd5b5061043c61069c366004612939565b610fa3565b3480156106ac575f80fd5b50601a5461040d9060ff1681565b3480156106c5575f80fd5b506103e06106d436600461284a565b611021565b3480156106e4575f80fd5b50602a546106f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c2565b34801561071b575f80fd5b5061043c61072a3660046129f5565b61103b565b34801561073a575f80fd5b505f546001600160a01b03166106f8565b348015610756575f80fd5b5061040d61076536600461284a565b611069565b348015610775575f80fd5b5061043c610784366004612775565b6110ad565b348015610794575f80fd5b506103e0611144565b3480156107a8575f80fd5b5061043c611173565b3480156107bc575f80fd5b50604080518082019091526005815264125251951560da1b60208201526103b5565b3480156107e9575f80fd5b506103e0601c5481565b3480156107fe575f80fd5b5061043c61080d3660046127d5565b611221565b34801561081d575f80fd5b50600d546106f8906001600160a01b031681565b34801561083c575f80fd5b5061040d61084b366004612775565b611274565b34801561085b575f80fd5b5061043c611280565b34801561086f575f80fd5b5061043c61087e366004612a0c565b6112c2565b34801561088e575f80fd5b506103e060135481565b3480156108a3575f80fd5b506103e060175481565b3480156108b8575f80fd5b5061043c6108c736600461279f565b6113df565b3480156108d7575f80fd5b506103e06108e636600461284a565b6001600160a01b03165f9081526024602052604090206002015490565b34801561090e575f80fd5b5061040d61091d36600461284a565b60076020525f908152604090205460ff1681565b34801561093c575f80fd5b5061096b61094b36600461284a565b60246020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103c2565b348015610991575f80fd5b506103e06109a0366004612a0c565b6114bf565b3480156109b0575f80fd5b506103e06109bf366004612a0c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156109f4575f80fd5b50601a5461040d90610100900460ff1681565b348015610a12575f80fd5b506103e0601f5481565b348015610a27575f80fd5b506103e0610a3636600461284a565b6001600160a01b03165f9081526024602052604090205490565b348015610a5b575f80fd5b5061043c610a6a366004612a38565b61152f565b348015610a7a575f80fd5b5061043c610a893660046127d5565b611638565b348015610a99575f80fd5b506103e0601e5481565b348015610aae575f80fd5b5061043c610abd36600461284a565b611697565b348015610acd575f80fd5b5061040d610adc36600461284a565b60256020525f908152604090205460ff1681565b348015610afb575f80fd5b506103e060275481565b5f610b11338484611713565b5060015b92915050565b5f546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b4490612a6e565b60405180910390fd5b602792909255602855602955565b5f546001600160a01b03163314610b845760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610bdc5760405162461bcd60e51b815260206004820152601a60248201527f626c61636b6c69737420686173206265656e207265766f6b65640000000000006044820152606401610b44565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600860205260409020805460ff191682151517905580610c6557610c61825f611836565b5050565b610c6182610c7284611021565b611836565b5f610c83848484611969565b610cd48433610ccf85604051806060016040528060288152602001612be6602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190611a93565b611713565b5060015b9392505050565b6001600160a01b0381165f908152602460205260408120548103610d0457505f919050565b6001600160a01b0382165f90815260246020526040812054610d2590611abe565b6001600160a01b0384165f90815260246020526040902060010154909150808211610d5357505f9392505050565b610d5d8282611ada565b949350505050565b5f546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610b4490612a6e565b60095460ff1615610de15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610b44565b6009805460ff1916600117905542600a55565b5f80546017546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015610e2c573d5f803e3d5ffd5b50601754601d54610e3c91611ada565b601d555f601755565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610eb85760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805461ff001916610100179055565b5f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f455760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff1615610f905760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805462ff0000191662010000179055565b5f546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610b4490612a6e565b5f5b825181101561101c57611013838281518110610fec57610fec612a8e565b602002602001015183838151811061100657611006612a8e565b6020026020010151611274565b50600101610fce565b505050565b6001600160a01b03165f9081526003602052604090205490565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610b4490612a6e565b601355565b6027546001600160a01b0382165f90815260236020526040812054909142916110929190612ab6565b108015610b1557506028546110a683610cdf565b1192915050565b5f546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4490612a6e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611120573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101c9190612ac9565b5f61116e6111515f611021565b61116861115f61dead611021565b60015490611ada565b90611ada565b905090565b5f546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff16156111f55760405162461bcd60e51b815260206004820152601860248201527f7361766545746820686173206265656e207265766f6b656400000000000000006044820152606401610b44565b60405133904780156108fc02915f818181858888f1935050505015801561121e573d5f803e3d5ffd5b50565b5f546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f610b11338484611969565b5f546001600160a01b031633146112a95760405162461bcd60e51b8152600401610b4490612a6e565b6029546112c0906112bb906002611ae5565b611af0565b565b6001600160a01b0382165f9081526005602052604090205460ff1615801561130257506001600160a01b0381165f9081526005602052604090205460ff16155b15610c615760095460ff166113595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b44565b600d546001600160a01b03838116911614806113825750600d546001600160a01b038281169116145b8061139b5750603c600a54426113989190612ae4565b10155b610c615760405162461bcd60e51b81526020600482015260156024820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b6044820152606401610b44565b5f546001600160a01b031633146114085760405162461bcd60e51b8152600401610b4490612a6e565b600e839055600f8290556011819055601254611425906005611bd6565b600e5411158015611445575060125461143f906008611bd6565b600f5411155b8015611460575060125461145a906008611bd6565b60115411155b61101c5760405162461bcd60e51b815260206004820152602a60248201527f62757946656520616e642073656c6c4665652063616e6e6f74206265206d6f7260448201526965207468616e2032302560b01b6064820152608401610b44565b5f80600b54600a546114d19190612ab6565b90504281106114e4575050601054610b15565b600d546001600160a01b0390811690841603611504575050600f54610b15565b600d546001600160a01b0390811690851603611524575050600e54610b15565b505060115492915050565b5f546001600160a01b031633146115585760405162461bcd60e51b8152600401610b4490612a6e565b801561156957600154600255505050565b5f6127108461157760015490565b6115819190612af7565b61158b9190612b0e565b90505f6127108461159b60015490565b6115a59190612af7565b6115af9190612b0e565b90505f6115d26103e86115cc60056115c660015490565b90611ae5565b90611bd6565b90508083101580156115e45750808210155b6116305760405162461bcd60e51b815260206004820181905260248201527f4d6178205458732063616e6e6f74206265206c657373207468616e20302e35256044820152606401610b44565b505050505050565b5f546001600160a01b031633146116615760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600660205260409020805460ff19168215801591909117909155610c6557610c61825f611836565b5f546001600160a01b031633146116c05760405162461bcd60e51b8152600401610b4490612a6e565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166117755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b0382166117d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561185a57506001600160a01b0382165f90815260246020526040902054155b156118bf57602180546001600160a01b0384165f818152602260205260408120839055600183018455929092527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b03191690911790556118f1565b801580156118e357506001600160a01b0382165f9081526024602052604090205415155b156118f1576118f182611be1565b6001600160a01b0382165f90815260246020526040902054601b5461192191839161191b91611ada565b90611cf1565b601b556001600160a01b0382165f90815260246020526040902081905561194781611abe565b6001600160a01b039092165f9081526024602052604090206001019190915550565b611974838383611cfc565b61197f838383611f17565b61198983836112c2565b6119923361203f565b61199c838361214a565b6119a7838383612196565b6001600160a01b0383165f908152600360205260409020546119c99082611ada565b6001600160a01b0384165f908152600360205260408120919091556119ee8484612204565b6119f85781611a03565b611a03848484612248565b6001600160a01b0384165f90815260036020526040902054909150611a289082611cf1565b6001600160a01b038085165f8181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7b9085815260200190565b60405180910390a3611a8d848461237f565b50505050565b5f8184841115611ab65760405162461bcd60e51b8152600401610b44919061272c565b505050900390565b5f610b156020546115cc601f5485611ae590919063ffffffff16565b5f610cd88284612ae4565b5f610cd88284612af7565b6021545f819003611aff575050565b5f805a90505f5b8483108015611b1457508381105b15611bcf578360265410611b27575f6026555b611b58602160265481548110611b3f57611b3f612a8e565b5f918252602090912001546001600160a01b0316611069565b15611b8e57611b8e602160265481548110611b7557611b75612a8e565b5f918252602090912001546001600160a01b031661203f565b611ba3611b9c5a8490611ada565b8490611cf1565b92505a602680549193505f611bb783612b2d565b91905055508080611bc790612b2d565b915050611b06565b5050505050565b5f610cd88284612b0e565b60218054611bf190600190612ae4565b81548110611c0157611c01612a8e565b5f9182526020808320909101546001600160a01b0384811684526022909252604090922054602180549290931692918110611c3e57611c3e612a8e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260229182905260408120546021805491939291611c8990600190612ae4565b81548110611c9957611c99612a8e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020556021805480611cce57611cce612b45565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610cd88284612ab6565b6001600160a01b0383165f9081526025602052604090205460ff16158015611d3c57506001600160a01b0382165f9081526025602052604090205460ff16155b611d7e5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610b44565b6001600160a01b038316611de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b5f8111611ea55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b611eae83611021565b81111561101c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b44565b610258600a5442611f289190612ae4565b11158015611f4e57506001600160a01b0383165f9081526005602052604090205460ff16155b8015611f7257506001600160a01b0382165f9081526005602052604090205460ff16155b8015611f8c5750600d546001600160a01b03838116911614155b8015611fa357506001600160a01b03821661dead14155b8015611fc757506001600160a01b0382165f9081526007602052604090205460ff16155b1561101c576002546001600160a01b0383165f90815260036020526040902054611ff19083611cf1565b111561101c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b44565b6001600160a01b0381165f9081526024602052604081205490036120605750565b5f61206a82610cdf565b90508015610c6157601e5461207f9082611cf1565b601e556040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156120b5573d5f803e3d5ffd5b506001600160a01b0382165f90815260236020908152604080832042905560249091529020600201546120e89082611cf1565b6001600160a01b0383165f90815260246020526040902060028101919091555461211190611abe565b6001600160a01b0383165f90815260246020526040812060010191909155601d8054839290612141908490612ae4565b90915550505050565b600d546001600160a01b03828116911614801561217f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c6157600160155f8282546121419190612ab6565b6121a18383836124f6565b1561101c575f6121b030611021565b9050606460015460016121c39190612af7565b6121cd9190612b0e565b81106121f157606460015460016121e49190612af7565b6121ee9190612b0e565b90505b6121fa81612590565b505f601555505050565b6001600160a01b0382165f9081526005602052604081205460ff16158015610cd85750506001600160a01b03165f9081526005602052604090205460ff1615919050565b5f8061225485856114bf565b9050801561237657600d545f9081906001600160a01b0390811690871603612298576122916012546115cc600e5488611ae590919063ffffffff16565b91506122cc565b600d546001600160a01b03908116908816036122cc576122c96012546115cc600f5488611ae590919063ffffffff16565b90505b811561234457305f908152600360205260409020546122eb9083611cf1565b305f81815260036020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061233b9086815260200190565b60405180910390a35b801561235b576017546123579082611cf1565b6017555b5f61236a826111688886611ada565b9450610cd89350505050565b50909392505050565b6001600160a01b0381165f90815260246020526040902054158015906123a75750601a5460ff165b156123b5576123b58161203f565b6001600160a01b0382165f9081526006602052604090205460ff161580156123ea5750600d546001600160a01b038281169116145b801561240c57506001600160a01b0382165f9081526024602052604090205415155b1561241a5761241a8261203f565b6001600160a01b0382165f9081526006602052604090205460ff166124465761244682610c7284611021565b6001600160a01b0381165f9081526006602052604090205460ff166124725761247281610c7283611021565b813b1515801561249a57506001600160a01b0382165f9081526008602052604090205460ff16155b156124a9576124a9825f611836565b803b151580156124d157506001600160a01b0381165f9081526008602052604090205460ff16155b156124e0576124e0815f611836565b601a5460ff1615610c6157610c61602954611af0565b5f8060195483101590505f60185461250d30611021565b601654911115915060ff16158015612527575060145460ff165b80156125305750815b801561255457506001600160a01b0386165f9081526005602052604090205460ff16155b801561256d5750600d546001600160a01b038681169116145b801561257d575060135460155410155b80156125865750805b9695505050505050565b4761259a826125e4565b5f6125a54783611ada565b9050801561101c57602a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611a8d573d5f803e3d5ffd5b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061261757612617612a8e565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561266e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126929190612b59565b816001815181106126a5576126a5612a8e565b6001600160a01b039283166020918202929092010152600c546126cb9130911684611713565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906127039085905f90869030904290600401612b74565b5f604051808303815f87803b15801561271a575f80fd5b505af1158015611630573d5f803e3d5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461121e575f80fd5b5f8060408385031215612786575f80fd5b823561279181612761565b946020939093013593505050565b5f805f606084860312156127b1575f80fd5b505081359360208301359350604090920135919050565b801515811461121e575f80fd5b5f80604083850312156127e6575f80fd5b82356127f181612761565b91506020830135612801816127c8565b809150509250929050565b5f805f6060848603121561281e575f80fd5b833561282981612761565b9250602084013561283981612761565b929592945050506040919091013590565b5f6020828403121561285a575f80fd5b8135610cd881612761565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128a2576128a2612865565b604052919050565b5f67ffffffffffffffff8211156128c3576128c3612865565b5060051b60200190565b5f82601f8301126128dc575f80fd5b813560206128f16128ec836128aa565b612879565b8083825260208201915060208460051b870101935086841115612912575f80fd5b602086015b8481101561292e5780358352918301918301612917565b509695505050505050565b5f806040838503121561294a575f80fd5b823567ffffffffffffffff80821115612961575f80fd5b818501915085601f830112612974575f80fd5b813560206129846128ec836128aa565b82815260059290921b840181019181810190898411156129a2575f80fd5b948201945b838610156129c95785356129ba81612761565b825294820194908201906129a7565b965050860135925050808211156129de575f80fd5b506129eb858286016128cd565b9150509250929050565b5f60208284031215612a05575f80fd5b5035919050565b5f8060408385031215612a1d575f80fd5b8235612a2881612761565b9150602083013561280181612761565b5f805f60608486031215612a4a575f80fd5b83359250602084013591506040840135612a63816127c8565b809150509250925092565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b1557610b15612aa2565b5f60208284031215612ad9575f80fd5b8151610cd8816127c8565b81810381811115610b1557610b15612aa2565b8082028115828204841417610b1557610b15612aa2565b5f82612b2857634e487b7160e01b5f52601260045260245ffd5b500490565b5f60018201612b3e57612b3e612aa2565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612b69575f80fd5b8151610cd881612761565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc45784516001600160a01b031683529383019391830191600101612b9f565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fe64b0ac62fa8d65ea8f7b7235cc3eb2d7f53e54cdfdabc7e504fbe15369751b64736f6c63430008190033

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.