ETH Price: $3,451.89 (+1.78%)
Gas: 4 Gwei

Token

WENBUTTON (WEN)
 

Overview

Max Total Supply

10,000,000 WEN

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
cvd.eth
Balance
183,005.845581163204840544 WEN

Value
$0.00
0xdaa7c1b5feaca5d1bc1bea7e7c07d91d3e6dfe51
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:
WEN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-13
*/

/**
#Wenbutton, you will always be asking #Wen 🤔. No utility other than a #Wenbutton and an awesome community #wenbutton. 😎😎😎😎

http://wenbutton.wtf/
https://twitter.com/wenbutton_wen
https://t.me/WENBUTTON_WEN

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20
{
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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


contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
        function factory() external view returns (address);

}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    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);

}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {

    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 LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner
    {
        isOpen = true;
    }

    function includeToWhiteList(address _address) public onlyOwner {
        _whiteList[_address] = true;
    }

}

contract WEN is Context, IERC20, LockToken 
{

    using SafeMath for uint256;
    address payable public marketingAddress = payable(0x42aD87fbf167BB08C88d0171D6efBD0741Fa9fff);
    address payable public devAddress = payable(0x42aD87fbf167BB08C88d0171D6efBD0741Fa9fff);
    address public newOwner = 0x42aD87fbf167BB08C88d0171D6efBD0741Fa9fff;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromWhale;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    string private _name = "WENBUTTON";
    string private _symbol = "WEN";
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _buyLiquidityFee = 50;
    uint256 public _buyMarketingFee = 700;
    uint256 public _buyDevFee = 50;
    uint256 public buyTotalFee = _buyLiquidityFee+_buyMarketingFee+_buyDevFee;
    uint256[] buyFeesBackup = [_buyLiquidityFee, _buyMarketingFee, _buyDevFee];
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellMarketingFee = 700;
    uint256 public  _sellDevFee = 0;
    uint256 public sellTotalFee = _sellLiquidityFee+_sellMarketingFee+_sellDevFee;
    uint256 public _transLiquidityFee = 0;
    uint256 public _transMarketingFee = 30;
    uint256 public  _transDevFee = 0;
    uint256 public transferTotalFee = _transLiquidityFee+_transMarketingFee+_transDevFee;
    uint256 public _maxTxAmount = _tTotal.div(100).mul(1); // max TX of total supply
    uint256 public _walletHoldingMaxLimit =  _tTotal.div(100).mul(2); // max WALLET of total supply
    uint256 private minimumTokensBeforeSwap = 30000 * 10**18; // swap back amount in tokens

        
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
        
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {
        _rOwned[newOwner] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[newOwner] = true;
        _isExcludedFromFee[address(this)] = true;
        includeToWhiteList(newOwner);
        _isExcludedFromWhale[newOwner] = true;
        emit Transfer(address(0), newOwner, _tTotal);
        excludeWalletsFromWhales();

        transferOwnership(newOwner);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    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 _transfer(address from, address to, uint256 amount) private open(from, to)
    {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        checkForWhale(from, to, amount);

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair)
        {
            if (overMinimumTokenBalance)
            {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
        }

        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to])
        {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }


    function swapTokens(uint256 contractTokenBalance) private lockTheSwap
    {
        uint256 __buyTotalFee  = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);    
        uint256 __sellTotalFee = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
        uint256 totalSwapableFees = __buyTotalFee.add(__sellTotalFee);

        uint256 halfLiquidityTokens = contractTokenBalance.mul(_buyLiquidityFee+_sellLiquidityFee).div(totalSwapableFees).div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        swapTokensForEth(swapableTokens);

        uint256 newBalance = address(this).balance;
        uint256 ethForLiquidity = newBalance.mul(_buyLiquidityFee+_sellLiquidityFee).div(totalSwapableFees).div(2);

        if(halfLiquidityTokens>0 && ethForLiquidity>0)
        {
            addLiquidity(halfLiquidityTokens, ethForLiquidity);
        }

        uint256 ethForMarketing = newBalance.mul(_buyMarketingFee+_sellMarketingFee).div(totalSwapableFees);
        if(ethForMarketing>0)
        {
           marketingAddress.transfer(ethForMarketing);
        }

        uint256 ethForDev = newBalance.sub(ethForLiquidity).sub(ethForMarketing);
        if(ethForDev>0)
        {
            devAddress.transfer(ethForDev);
        }
    }

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



    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }


    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private
    {
        if(!takeFee) 
        {
            removeAllFee();
        }
        else
        {
            if(recipient==uniswapV2Pair)
            {
                setSellFee();
            }

            if(sender != uniswapV2Pair && recipient != uniswapV2Pair)
            {
                setWalletToWalletTransferFee();
            }
        }


        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        restoreAllFee();

    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount,  uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 tTransferAmount, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if(tLiquidity>0)  { emit Transfer(sender, address(this), tLiquidity); }
    }


    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount) = _getRValues(tAmount, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, tTransferAmount, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256) {
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tLiquidity);
        return (tTransferAmount, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rLiquidity);
        return (rAmount, rTransferAmount);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        }
    }


    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        uint256 fees = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);
        return _amount.mul(fees).div(1000);
    }


    function isExcludedFromFee(address account) public view onlyOwner returns(bool)  {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function removeAllFee() private {
        _buyLiquidityFee = 0;
        _buyMarketingFee = 0;
        _buyDevFee = 0;
    }

    function restoreAllFee() private
    {
        _buyLiquidityFee = buyFeesBackup[0];
        _buyMarketingFee = buyFeesBackup[1];
        _buyDevFee = buyFeesBackup[2];
    }

    function setSellFee() private
    {
        _buyLiquidityFee = _sellLiquidityFee;
        _buyMarketingFee = _sellMarketingFee;
        _buyDevFee = _sellDevFee;
    }


    function setWalletToWalletTransferFee() private 
    {
        _buyLiquidityFee = _transLiquidityFee;
        _buyMarketingFee = _transMarketingFee;
        _buyDevFee = _transDevFee;        
    }


    function setBuyFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _buyLiquidityFee = _liquidityFee;
        _buyMarketingFee = _marketingFee;
        _buyDevFee = _devFee;
        buyFeesBackup = [_buyLiquidityFee, _buyMarketingFee, _buyDevFee];
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        buyTotalFee = _buyLiquidityFee+_buyMarketingFee+_buyDevFee;
    }

    function setSellFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _sellLiquidityFee = _liquidityFee;
        _sellMarketingFee = _marketingFee;
        _sellDevFee = _devFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        sellTotalFee = _sellLiquidityFee+_sellMarketingFee+_sellDevFee;
    }


    function setTransferFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _transLiquidityFee = _liquidityFee;
        _transMarketingFee = _marketingFee;
        _transDevFee = _devFee;
        transferTotalFee = _transLiquidityFee+_transMarketingFee+_transDevFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
    }


    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner()
    {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount>=_tTotal.div(5), "Too low limit");
    }

    function setMinimumTokensBeforeSwap(uint256 _minimumTokensBeforeSwap) external onlyOwner()
    {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner()
    {
        marketingAddress = payable(_marketingAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner()
    {
        devAddress = payable(_devAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner
    {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function excludeWalletsFromWhales() private
    {
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
        _isExcludedFromWhale[devAddress]=true;
        _isExcludedFromWhale[marketingAddress]=true;
    }


    function checkForWhale(address from, address to, uint256 amount)  private view
    {
        uint256 newBalance = balanceOf(to).add(amount);
        if(!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to])
        {
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet");
        }
        if(from==uniswapV2Pair && !_isExcludedFromWhale[to])
        {
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet");
        }
    }

    function setExcludedFromWhale(address account, bool _enabled) public onlyOwner
    {
        _isExcludedFromWhale[account] = _enabled;
    }

    function  setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner
    {
        _walletHoldingMaxLimit = _amount;
        require(_walletHoldingMaxLimit > _tTotal.div(100).mul(1), "Too less limit"); //min 1%

    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
    }

    function rescueStuckBalance () public onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    receive() external payable {}

}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTransferFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b03199081167342ad87fbf167bb08c88d0171d6efbd0741fa9fff9081179092556006805482168317905560078054821690921790915560088054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055610100604052600960c0908152682ba2a7212aaa2a27a760b91b60e0526010906200009590826200090c565b506040805180820190915260038152622ba2a760e91b6020820152601190620000bf90826200090c565b506012805460ff1916811790556a084595161401484a0000006013819055620000eb90600019620009ee565b620000f99060001962000a1b565b601455603260168190556102bc601781905560188290556200011c908262000a31565b62000128919062000a31565b601955604051806060016040528060165481526020016017548152602001601854815250601a9060036200015e92919062000800565b506064601b556102bc601c556000601d55601d54601c54601b5462000184919062000a31565b62000190919062000a31565b601e556000601f55601e6020556000602155602154602054601f54620001b7919062000a31565b620001c3919062000a31565b602255601354620001e590600190620001de906064620004e2565b9062000535565b6023556013546200020090600290620001de906064620004e2565b60245569065a4da25d3016c000006025556026805461ff0019166101001790553480156200022d57600080fd5b50600080546001600160a01b03191633908117825560405190918291600080516020620038ba833981519152908290a3503360009081526004602081815260408084208054600160ff199182168117909255308652828620805490911690911790556014546007546001600160a01b039081168652600984529482902055600854815163c45a015560e01b81529151941693849363c45a01559383820193909291908290030181865afa158015620002e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030f919062000a47565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000383919062000a47565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f7919062000a47565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff1991821681179092553084529190922080549091169091179055546200044d9116620005c3565b600780546001600160a01b039081166000908152600d6020526040808220805460ff191660011790559254601354935192169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004b29190815260200190565b60405180910390a3620004c462000632565b600754620004db906001600160a01b0316620006c8565b5062000af3565b60006200052c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007c460201b60201c565b90505b92915050565b60008260000362000549575060006200052f565b600062000557838562000a72565b90508262000566858362000a8c565b146200052c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b031633146200060e5760405162461bcd60e51b815260206004820181905260248201526000805160206200389a8339815191526044820152606401620005ba565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d60006200064b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b03163314620007135760405162461bcd60e51b815260206004820181905260248201526000805160206200389a8339815191526044820152606401620005ba565b6001600160a01b0381166200077a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005ba565b600080546040516001600160a01b0380851693921691600080516020620038ba83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008183620007e85760405162461bcd60e51b8152600401620005ba919062000aa3565b506000620007f7848662000a8c565b95945050505050565b8280548282559060005260206000209081019282156200083e579160200282015b828111156200083e57825182559160200191906001019062000821565b506200084c92915062000850565b5090565b5b808211156200084c576000815560010162000851565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200089257607f821691505b602082108103620008b357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200090757600081815260208120601f850160051c81016020861015620008e25750805b601f850160051c820191505b818110156200090357828155600101620008ee565b5050505b505050565b81516001600160401b0381111562000928576200092862000867565b62000940816200093984546200087d565b84620008b9565b602080601f8311600181146200097857600084156200095f5750858301515b600019600386901b1c1916600185901b17855562000903565b600085815260208120601f198616915b82811015620009a95788860151825594840194600190910190840162000988565b5085821015620009c85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008262000a005762000a00620009d8565b500690565b634e487b7160e01b600052601160045260246000fd5b818103818111156200052f576200052f62000a05565b808201808211156200052f576200052f62000a05565b60006020828403121562000a5a57600080fd5b81516001600160a01b03811681146200052c57600080fd5b80820281158282048414176200052f576200052f62000a05565b60008262000a9e5762000a9e620009d8565b500490565b600060208083528351808285015260005b8181101562000ad25785810183015185820160400152820162000ab4565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a051612d3b62000b5f60003960008181610576015281816117e001528181611a8701528181611ce801528181611d380152611d7501526000818161042301528181611fba01528181612073015281816120af0152818161216201526121890152612d3b6000f3fe6080604052600436106103535760003560e01c806388790a68116101c6578063c5d24189116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610981578063f887ea40146109a1578063fb201b1d146109c1578063fe9f5b54146109d657600080fd5b8063dd62ed3e146108fb578063ea2f0b3714610941578063ec28438a1461096157600080fd5b8063d0d41fe1116100d1578063d0d41fe114610885578063d4ee1d90146108a5578063d6a694f5146108c5578063dc44b6a0146108e557600080fd5b8063c5d2418914610843578063c860795214610859578063c9cf77891461086f57600080fd5b8063a457c2d711610164578063aacebbe31161013e578063aacebbe3146107cd578063aee50b1e146107ed578063b863864c1461080d578063c49b9a801461082357600080fd5b8063a457c2d71461076d578063a5ece9411461078d578063a9059cbb146107ad57600080fd5b806390a3dd9b116101a057806390a3dd9b1461070d578063915c1aac1461072d57806395d89b4114610743578063a073d37f1461075857600080fd5b806388790a68146106b95780638da5cb5b146106cf578063906e9dd0146106ed57600080fd5b806344d4225f116102a0578063620158521161023e578063715018a611610218578063715018a61461066257806372b28e45146106775780637d1db4a51461068d5780638563e718146106a357600080fd5b806362015852146106175780636fee4f7a1461062d57806370a082311461064257600080fd5b80634a74bb021161027a5780634a74bb02146105985780634b880e88146105b75780634e3c06b1146105d75780635342acb4146105f757600080fd5b806344d4225f1461052a57806347535d7b1461054a57806349bd5a5e1461056457600080fd5b806318160ddd1161030d5780633705b392116102e75780633705b392146104b457806339509351146104ca5780633ad10ef6146104ea578063437823ec1461050a57600080fd5b806318160ddd1461045d57806323b872dd14610472578063313ce5671461049257600080fd5b8062afb3251461035f57806306fdde0314610388578063095ea7b3146103aa57806312eb7c79146103da57806313114a9d146103fc5780631694505e1461041157600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b50610375601e5481565b6040519081526020015b60405180910390f35b34801561039457600080fd5b5061039d6109ec565b60405161037f91906128a6565b3480156103b657600080fd5b506103ca6103c5366004612909565b610a7e565b604051901515815260200161037f565b3480156103e657600080fd5b506103fa6103f5366004612935565b610a95565b005b34801561040857600080fd5b50601554610375565b34801561041d57600080fd5b506104457f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161037f565b34801561046957600080fd5b50601354610375565b34801561047e57600080fd5b506103ca61048d366004612961565b610b0c565b34801561049e57600080fd5b5060125460405160ff909116815260200161037f565b3480156104c057600080fd5b5061037560195481565b3480156104d657600080fd5b506103ca6104e5366004612909565b610b75565b3480156104f657600080fd5b50600654610445906001600160a01b031681565b34801561051657600080fd5b506103fa6105253660046129a2565b610bab565b34801561053657600080fd5b506103fa6105453660046129bf565b610bf9565b34801561055657600080fd5b506003546103ca9060ff1681565b34801561057057600080fd5b506104457f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a457600080fd5b506026546103ca90610100900460ff1681565b3480156105c357600080fd5b506103fa6105d23660046129a2565b610c87565b3480156105e357600080fd5b506103fa6105f23660046129e8565b610cd5565b34801561060357600080fd5b506103ca6106123660046129a2565b610d2a565b34801561062357600080fd5b5061037560185481565b34801561063957600080fd5b506103fa610d78565b34801561064e57600080fd5b5061037561065d3660046129a2565b610e2d565b34801561066e57600080fd5b506103fa610e8c565b34801561068357600080fd5b5061037560245481565b34801561069957600080fd5b5061037560235481565b3480156106af57600080fd5b50610375601f5481565b3480156106c557600080fd5b50610375601b5481565b3480156106db57600080fd5b506000546001600160a01b0316610445565b3480156106f957600080fd5b506103fa6107083660046129a2565b610f00565b34801561071957600080fd5b506103fa610728366004612935565b610f4c565b34801561073957600080fd5b5061037560205481565b34801561074f57600080fd5b5061039d610fe6565b34801561076457600080fd5b50602554610375565b34801561077957600080fd5b506103ca610788366004612909565b610ff5565b34801561079957600080fd5b50600554610445906001600160a01b031681565b3480156107b957600080fd5b506103ca6107c8366004612909565b611044565b3480156107d957600080fd5b506103fa6107e83660046129a2565b611051565b3480156107f957600080fd5b506103fa6108083660046129bf565b61107b565b34801561081957600080fd5b5061037560225481565b34801561082f57600080fd5b506103fa61083e366004612a1d565b6110aa565b34801561084f57600080fd5b5061037560175481565b34801561086557600080fd5b50610375601c5481565b34801561087b57600080fd5b50610375601d5481565b34801561089157600080fd5b506103fa6108a03660046129a2565b611128565b3480156108b157600080fd5b50600754610445906001600160a01b031681565b3480156108d157600080fd5b506103fa6108e0366004612935565b611174565b3480156108f157600080fd5b5061037560165481565b34801561090757600080fd5b50610375610916366004612a38565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561094d57600080fd5b506103fa61095c3660046129a2565b6111e5565b34801561096d57600080fd5b506103fa61097c3660046129bf565b611230565b34801561098d57600080fd5b506103fa61099c3660046129a2565b6112ae565b3480156109ad57600080fd5b50600854610445906001600160a01b031681565b3480156109cd57600080fd5b506103fa611398565b3480156109e257600080fd5b5061037560215481565b6060601080546109fb90612a71565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2790612a71565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b5050505050905090565b6000610a8b3384846113d1565b5060015b92915050565b6000546001600160a01b03163314610ac85760405162461bcd60e51b8152600401610abf90612aab565b60405180910390fd5b601f8390556020829055602181905580610ae28385612af6565b610aec9190612af6565b6022556000610b0582610aff86866114f5565b906114f5565b5050505050565b6000610b1984848461155b565b610b6b8433610b6685604051806060016040528060288152602001612cb9602891396001600160a01b038a166000908152600b60209081526040808320338452909152902054919061188f565b6113d1565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a8b918590610b6690866114f5565b6000546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610c235760405162461bcd60e51b8152600401610abf90612aab565b6024819055601354610c4390600190610c3d9060646118c9565b9061190b565b60245411610c845760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610abf565b50565b6000546001600160a01b03163314610cb15760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cff5760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d555760405162461bcd60e51b8152600401610abf90612aab565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610da25760405162461bcd60e51b8152600401610abf90612aab565b604051600090339047908381818185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b5050905080610c845760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610abf565b6001600160a01b0381166000908152600e602052604081205460ff1615610e6a57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a8f9061198d565b6000546001600160a01b03163314610eb65760405162461bcd60e51b8152600401610abf90612aab565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610abf90612aab565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610abf90612aab565b6016839055601782905560188190556040805160608101825284815260208101849052908101829052610fad90601a906003612846565b506000610fbe82610aff86866114f5565b9050601854601754601654610fd39190612af6565b610fdd9190612af6565b60195550505050565b6060601180546109fb90612a71565b6000610a8b3384610b6685604051806060016040528060258152602001612ce160259139336000908152600b602090815260408083206001600160a01b038d168452909152902054919061188f565b6000610a8b33848461155b565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610abf90612aab565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610abf90612aab565b602555565b6000546001600160a01b031633146110d45760405162461bcd60e51b8152600401610abf90612aab565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061111d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146111525760405162461bcd60e51b8152600401610abf90612aab565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610abf90612aab565b601b839055601c829055601d81905560006111bd82610aff86866114f5565b9050601d54601c54601b546111d29190612af6565b6111dc9190612af6565b601e5550505050565b6000546001600160a01b0316331461120f5760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610abf90612aab565b602381905560135461126d9060056118c9565b6023541015610c845760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610abf565b6000546001600160a01b031633146112d85760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03811661133d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610abf90612aab565b6003805460ff19166001179055565b6001600160a01b0383166114335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abf565b6001600160a01b0382166114945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abf565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806115028385612af6565b9050838110156115545760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610abf565b9392505050565b6003548390839060ff168061158857506001600160a01b03821660009081526004602052604090205460ff165b806115ab57506001600160a01b03811660009081526004602052604090205460ff165b6115e25760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610abf565b6001600160a01b0385166116465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abf565b6001600160a01b0384166116a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abf565b6000831161170a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abf565b6000546001600160a01b0386811691161480159061173657506000546001600160a01b03858116911614155b1561179e5760235483111561179e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610abf565b60006117a930610e2d565b6025549091508110156117bd878787611a0a565b60265460ff161580156117d75750602654610100900460ff165b801561181557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b1561182e57801561182e57602554915061182e82611b0c565b6001600160a01b0387166000908152600c602052604090205460019060ff168061187057506001600160a01b0387166000908152600c602052604090205460ff165b15611879575060005b61188588888884611cc8565b5050505050505050565b600081848411156118b35760405162461bcd60e51b8152600401610abf91906128a6565b5060006118c08486612b09565b95945050505050565b600061155483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ed0565b60008260000361191d57506000610a8f565b60006119298385612b1c565b9050826119368583612b33565b146115545760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610abf565b60006014548211156119f45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610abf565b60006119fe611efe565b905061155483826118c9565b6000611a1982610aff85610e2d565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611a5e57506001600160a01b0383166000908152600d602052604090205460ff16155b15611a8557602454811115611a855760405162461bcd60e51b8152600401610abf90612b55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611adf57506001600160a01b0383166000908152600d602052604090205460ff16155b15611b0657602454811115611b065760405162461bcd60e51b8152600401610abf90612b55565b50505050565b6026805460ff19166001179055601854601754601654600092611b34929091610aff916114f5565b90506000611b55601d54610aff601c54601b546114f590919063ffffffff16565b90506000611b6383836114f5565b90506000611b906002611b8a84611b8a601b54601654611b839190612af6565b8a9061190b565b906118c9565b90506000611b9e8683611f21565b9050611ba981611f63565b60004790506000611bd36002611b8a87611b8a601b54601654611bcc9190612af6565b879061190b565b9050600084118015611be55750600081115b15611bf457611bf4848261215c565b6000611c1486611b8a601c54601754611c0d9190612af6565b869061190b565b90508015611c58576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611c56573d6000803e3d6000fd5b505b6000611c6e82611c688686611f21565b90611f21565b90508015611cb2576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611cb0573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b80611ce657611ce1600060168190556017819055601855565b611dc6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611d3657611d36601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015611daa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611dc657611dc6601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e0757506001600160a01b0383166000908152600e602052604090205460ff16155b15611e1c57611e1784848461225b565b611ec8565b6001600160a01b0384166000908152600e602052604090205460ff16158015611e5d57506001600160a01b0383166000908152600e602052604090205460ff165b15611e6d57611e178484846123b4565b6001600160a01b0384166000908152600e602052604090205460ff168015611ead57506001600160a01b0383166000908152600e602052604090205460ff165b15611ebd57611e17848484612455565b611ec88484846124c0565b611b066124fc565b60008183611ef15760405162461bcd60e51b8152600401610abf91906128a6565b5060006118c08486612b33565b6000806000611f0b61256b565b9092509050611f1a82826118c9565b9250505090565b600061155483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061188f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f9857611f98612b9d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190612bb3565b8160018151811061204d5761204d612b9d565b60200260200101906001600160a01b031690816001600160a01b031681525050612098307f0000000000000000000000000000000000000000000000000000000000000000846113d1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120ed908590600090869030904290600401612c14565b600060405180830381600087803b15801561210757600080fd5b505af115801561211b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612150929190612c50565b60405180910390a15050565b612187307f0000000000000000000000000000000000000000000000000000000000000000846113d1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806121ce6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612236573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b059190612c71565b60008060008061226a856126ed565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122979086611f21565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546122c69085611f21565b6001600160a01b0380891660009081526009602052604080822093909355908816815220546122f590846114f5565b6001600160a01b0387166000908152600960205260409020556123178161272b565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161235c91815260200190565b60405180910390a380156123ab5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806123c3856126ed565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123f09085611f21565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461242690836114f5565b6001600160a01b0387166000908152600a60209081526040808320939093556009905220546122f590846114f5565b600080600080612464856126ed565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124919086611f21565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123f09085611f21565b6000806000806124cf856126ed565b6001600160a01b038b16600090815260096020526040902054939750919550935091506122c69085611f21565b601a60008154811061251057612510612b9d565b9060005260206000200154601681905550601a60018154811061253557612535612b9d565b9060005260206000200154601781905550601a60028154811061255a5761255a612b9d565b600091825260209091200154601855565b6014546013546000918291825b600f548110156126bd578260096000600f848154811061259a5761259a612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612605575081600a6000600f84815481106125de576125de612b9d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561261b57601454601354945094505050509091565b61266160096000600f848154811061263557612635612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f21565b92506126a9600a6000600f848154811061267d5761267d612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f21565b9150806126b581612c9f565b915050612578565b506013546014546126cd916118c9565b8210156126e4576014546013549350935050509091565b90939092509050565b6000806000806000806126ff876127b4565b915091506000806127188984612713611efe565b6127db565b909a909950939750919550919350505050565b6000612735611efe565b90506000612743838361190b565b3060009081526009602052604090205490915061276090826114f5565b30600090815260096020908152604080832093909355600e9052205460ff16156127af57306000908152600a602052604090205461279e90846114f5565b306000908152600a60205260409020555b505050565b60008060006127c284612814565b905060006127d08583611f21565b959194509092505050565b600080806127e9868561190b565b905060006127f7868661190b565b905060006128058383611f21565b92989297509195505050505050565b600080612834601854610aff6017546016546114f590919063ffffffff16565b90506115546103e8611b8a858461190b565b828054828255906000526020600020908101928215612881579160200282015b82811115612881578251825591602001919060010190612866565b5061288d929150612891565b5090565b5b8082111561288d5760008155600101612892565b600060208083528351808285015260005b818110156128d3578581018301518582016040015282016128b7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8457600080fd5b6000806040838503121561291c57600080fd5b8235612927816128f4565b946020939093013593505050565b60008060006060848603121561294a57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561297657600080fd5b8335612981816128f4565b92506020840135612991816128f4565b929592945050506040919091013590565b6000602082840312156129b457600080fd5b8135611554816128f4565b6000602082840312156129d157600080fd5b5035919050565b80358015158114610d7357600080fd5b600080604083850312156129fb57600080fd5b8235612a06816128f4565b9150612a14602084016129d8565b90509250929050565b600060208284031215612a2f57600080fd5b611554826129d8565b60008060408385031215612a4b57600080fd5b8235612a56816128f4565b91506020830135612a66816128f4565b809150509250929050565b600181811c90821680612a8557607f821691505b602082108103612aa557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8f57610a8f612ae0565b81810381811115610a8f57610a8f612ae0565b8082028115828204841417610a8f57610a8f612ae0565b600082612b5057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bc557600080fd5b8151611554816128f4565b600081518084526020808501945080840160005b83811015612c095781516001600160a01b031687529582019590820190600101612be4565b509495945050505050565b85815284602082015260a060408201526000612c3360a0830186612bd0565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c696040830184612bd0565b949350505050565b600080600060608486031215612c8657600080fd5b8351925060208401519150604084015190509250925092565b600060018201612cb157612cb1612ae0565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122036aea2ebb3c2f31fb6dca7b00d679b7b1d5e2c04a2a195416abc659a6846954564736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103535760003560e01c806388790a68116101c6578063c5d24189116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610981578063f887ea40146109a1578063fb201b1d146109c1578063fe9f5b54146109d657600080fd5b8063dd62ed3e146108fb578063ea2f0b3714610941578063ec28438a1461096157600080fd5b8063d0d41fe1116100d1578063d0d41fe114610885578063d4ee1d90146108a5578063d6a694f5146108c5578063dc44b6a0146108e557600080fd5b8063c5d2418914610843578063c860795214610859578063c9cf77891461086f57600080fd5b8063a457c2d711610164578063aacebbe31161013e578063aacebbe3146107cd578063aee50b1e146107ed578063b863864c1461080d578063c49b9a801461082357600080fd5b8063a457c2d71461076d578063a5ece9411461078d578063a9059cbb146107ad57600080fd5b806390a3dd9b116101a057806390a3dd9b1461070d578063915c1aac1461072d57806395d89b4114610743578063a073d37f1461075857600080fd5b806388790a68146106b95780638da5cb5b146106cf578063906e9dd0146106ed57600080fd5b806344d4225f116102a0578063620158521161023e578063715018a611610218578063715018a61461066257806372b28e45146106775780637d1db4a51461068d5780638563e718146106a357600080fd5b806362015852146106175780636fee4f7a1461062d57806370a082311461064257600080fd5b80634a74bb021161027a5780634a74bb02146105985780634b880e88146105b75780634e3c06b1146105d75780635342acb4146105f757600080fd5b806344d4225f1461052a57806347535d7b1461054a57806349bd5a5e1461056457600080fd5b806318160ddd1161030d5780633705b392116102e75780633705b392146104b457806339509351146104ca5780633ad10ef6146104ea578063437823ec1461050a57600080fd5b806318160ddd1461045d57806323b872dd14610472578063313ce5671461049257600080fd5b8062afb3251461035f57806306fdde0314610388578063095ea7b3146103aa57806312eb7c79146103da57806313114a9d146103fc5780631694505e1461041157600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b50610375601e5481565b6040519081526020015b60405180910390f35b34801561039457600080fd5b5061039d6109ec565b60405161037f91906128a6565b3480156103b657600080fd5b506103ca6103c5366004612909565b610a7e565b604051901515815260200161037f565b3480156103e657600080fd5b506103fa6103f5366004612935565b610a95565b005b34801561040857600080fd5b50601554610375565b34801561041d57600080fd5b506104457f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161037f565b34801561046957600080fd5b50601354610375565b34801561047e57600080fd5b506103ca61048d366004612961565b610b0c565b34801561049e57600080fd5b5060125460405160ff909116815260200161037f565b3480156104c057600080fd5b5061037560195481565b3480156104d657600080fd5b506103ca6104e5366004612909565b610b75565b3480156104f657600080fd5b50600654610445906001600160a01b031681565b34801561051657600080fd5b506103fa6105253660046129a2565b610bab565b34801561053657600080fd5b506103fa6105453660046129bf565b610bf9565b34801561055657600080fd5b506003546103ca9060ff1681565b34801561057057600080fd5b506104457f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed81565b3480156105a457600080fd5b506026546103ca90610100900460ff1681565b3480156105c357600080fd5b506103fa6105d23660046129a2565b610c87565b3480156105e357600080fd5b506103fa6105f23660046129e8565b610cd5565b34801561060357600080fd5b506103ca6106123660046129a2565b610d2a565b34801561062357600080fd5b5061037560185481565b34801561063957600080fd5b506103fa610d78565b34801561064e57600080fd5b5061037561065d3660046129a2565b610e2d565b34801561066e57600080fd5b506103fa610e8c565b34801561068357600080fd5b5061037560245481565b34801561069957600080fd5b5061037560235481565b3480156106af57600080fd5b50610375601f5481565b3480156106c557600080fd5b50610375601b5481565b3480156106db57600080fd5b506000546001600160a01b0316610445565b3480156106f957600080fd5b506103fa6107083660046129a2565b610f00565b34801561071957600080fd5b506103fa610728366004612935565b610f4c565b34801561073957600080fd5b5061037560205481565b34801561074f57600080fd5b5061039d610fe6565b34801561076457600080fd5b50602554610375565b34801561077957600080fd5b506103ca610788366004612909565b610ff5565b34801561079957600080fd5b50600554610445906001600160a01b031681565b3480156107b957600080fd5b506103ca6107c8366004612909565b611044565b3480156107d957600080fd5b506103fa6107e83660046129a2565b611051565b3480156107f957600080fd5b506103fa6108083660046129bf565b61107b565b34801561081957600080fd5b5061037560225481565b34801561082f57600080fd5b506103fa61083e366004612a1d565b6110aa565b34801561084f57600080fd5b5061037560175481565b34801561086557600080fd5b50610375601c5481565b34801561087b57600080fd5b50610375601d5481565b34801561089157600080fd5b506103fa6108a03660046129a2565b611128565b3480156108b157600080fd5b50600754610445906001600160a01b031681565b3480156108d157600080fd5b506103fa6108e0366004612935565b611174565b3480156108f157600080fd5b5061037560165481565b34801561090757600080fd5b50610375610916366004612a38565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561094d57600080fd5b506103fa61095c3660046129a2565b6111e5565b34801561096d57600080fd5b506103fa61097c3660046129bf565b611230565b34801561098d57600080fd5b506103fa61099c3660046129a2565b6112ae565b3480156109ad57600080fd5b50600854610445906001600160a01b031681565b3480156109cd57600080fd5b506103fa611398565b3480156109e257600080fd5b5061037560215481565b6060601080546109fb90612a71565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2790612a71565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b5050505050905090565b6000610a8b3384846113d1565b5060015b92915050565b6000546001600160a01b03163314610ac85760405162461bcd60e51b8152600401610abf90612aab565b60405180910390fd5b601f8390556020829055602181905580610ae28385612af6565b610aec9190612af6565b6022556000610b0582610aff86866114f5565b906114f5565b5050505050565b6000610b1984848461155b565b610b6b8433610b6685604051806060016040528060288152602001612cb9602891396001600160a01b038a166000908152600b60209081526040808320338452909152902054919061188f565b6113d1565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a8b918590610b6690866114f5565b6000546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610c235760405162461bcd60e51b8152600401610abf90612aab565b6024819055601354610c4390600190610c3d9060646118c9565b9061190b565b60245411610c845760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610abf565b50565b6000546001600160a01b03163314610cb15760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cff5760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d555760405162461bcd60e51b8152600401610abf90612aab565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610da25760405162461bcd60e51b8152600401610abf90612aab565b604051600090339047908381818185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b5050905080610c845760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610abf565b6001600160a01b0381166000908152600e602052604081205460ff1615610e6a57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a8f9061198d565b6000546001600160a01b03163314610eb65760405162461bcd60e51b8152600401610abf90612aab565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610abf90612aab565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610abf90612aab565b6016839055601782905560188190556040805160608101825284815260208101849052908101829052610fad90601a906003612846565b506000610fbe82610aff86866114f5565b9050601854601754601654610fd39190612af6565b610fdd9190612af6565b60195550505050565b6060601180546109fb90612a71565b6000610a8b3384610b6685604051806060016040528060258152602001612ce160259139336000908152600b602090815260408083206001600160a01b038d168452909152902054919061188f565b6000610a8b33848461155b565b6000546001600160a01b03163314610c845760405162461bcd60e51b8152600401610abf90612aab565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610abf90612aab565b602555565b6000546001600160a01b031633146110d45760405162461bcd60e51b8152600401610abf90612aab565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061111d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146111525760405162461bcd60e51b8152600401610abf90612aab565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461119e5760405162461bcd60e51b8152600401610abf90612aab565b601b839055601c829055601d81905560006111bd82610aff86866114f5565b9050601d54601c54601b546111d29190612af6565b6111dc9190612af6565b601e5550505050565b6000546001600160a01b0316331461120f5760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610abf90612aab565b602381905560135461126d9060056118c9565b6023541015610c845760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610abf565b6000546001600160a01b031633146112d85760405162461bcd60e51b8152600401610abf90612aab565b6001600160a01b03811661133d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113c25760405162461bcd60e51b8152600401610abf90612aab565b6003805460ff19166001179055565b6001600160a01b0383166114335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abf565b6001600160a01b0382166114945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abf565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806115028385612af6565b9050838110156115545760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610abf565b9392505050565b6003548390839060ff168061158857506001600160a01b03821660009081526004602052604090205460ff165b806115ab57506001600160a01b03811660009081526004602052604090205460ff165b6115e25760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610abf565b6001600160a01b0385166116465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abf565b6001600160a01b0384166116a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abf565b6000831161170a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abf565b6000546001600160a01b0386811691161480159061173657506000546001600160a01b03858116911614155b1561179e5760235483111561179e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610abf565b60006117a930610e2d565b6025549091508110156117bd878787611a0a565b60265460ff161580156117d75750602654610100900460ff165b801561181557507f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed6001600160a01b0316876001600160a01b031614155b1561182e57801561182e57602554915061182e82611b0c565b6001600160a01b0387166000908152600c602052604090205460019060ff168061187057506001600160a01b0387166000908152600c602052604090205460ff165b15611879575060005b61188588888884611cc8565b5050505050505050565b600081848411156118b35760405162461bcd60e51b8152600401610abf91906128a6565b5060006118c08486612b09565b95945050505050565b600061155483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ed0565b60008260000361191d57506000610a8f565b60006119298385612b1c565b9050826119368583612b33565b146115545760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610abf565b60006014548211156119f45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610abf565b60006119fe611efe565b905061155483826118c9565b6000611a1982610aff85610e2d565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611a5e57506001600160a01b0383166000908152600d602052604090205460ff16155b15611a8557602454811115611a855760405162461bcd60e51b8152600401610abf90612b55565b7f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed6001600160a01b0316846001600160a01b0316148015611adf57506001600160a01b0383166000908152600d602052604090205460ff16155b15611b0657602454811115611b065760405162461bcd60e51b8152600401610abf90612b55565b50505050565b6026805460ff19166001179055601854601754601654600092611b34929091610aff916114f5565b90506000611b55601d54610aff601c54601b546114f590919063ffffffff16565b90506000611b6383836114f5565b90506000611b906002611b8a84611b8a601b54601654611b839190612af6565b8a9061190b565b906118c9565b90506000611b9e8683611f21565b9050611ba981611f63565b60004790506000611bd36002611b8a87611b8a601b54601654611bcc9190612af6565b879061190b565b9050600084118015611be55750600081115b15611bf457611bf4848261215c565b6000611c1486611b8a601c54601754611c0d9190612af6565b869061190b565b90508015611c58576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611c56573d6000803e3d6000fd5b505b6000611c6e82611c688686611f21565b90611f21565b90508015611cb2576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611cb0573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b80611ce657611ce1600060168190556017819055601855565b611dc6565b7f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed6001600160a01b0316836001600160a01b031603611d3657611d36601b54601655601c54601755601d54601855565b7f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed6001600160a01b0316846001600160a01b031614158015611daa57507f0000000000000000000000008599bfcda6387e13aea36636239fb48c5987f3ed6001600160a01b0316836001600160a01b031614155b15611dc657611dc6601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e0757506001600160a01b0383166000908152600e602052604090205460ff16155b15611e1c57611e1784848461225b565b611ec8565b6001600160a01b0384166000908152600e602052604090205460ff16158015611e5d57506001600160a01b0383166000908152600e602052604090205460ff165b15611e6d57611e178484846123b4565b6001600160a01b0384166000908152600e602052604090205460ff168015611ead57506001600160a01b0383166000908152600e602052604090205460ff165b15611ebd57611e17848484612455565b611ec88484846124c0565b611b066124fc565b60008183611ef15760405162461bcd60e51b8152600401610abf91906128a6565b5060006118c08486612b33565b6000806000611f0b61256b565b9092509050611f1a82826118c9565b9250505090565b600061155483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061188f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f9857611f98612b9d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a9190612bb3565b8160018151811061204d5761204d612b9d565b60200260200101906001600160a01b031690816001600160a01b031681525050612098307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113d1565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120ed908590600090869030904290600401612c14565b600060405180830381600087803b15801561210757600080fd5b505af115801561211b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612150929190612c50565b60405180910390a15050565b612187307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113d1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806121ce6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612236573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b059190612c71565b60008060008061226a856126ed565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122979086611f21565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546122c69085611f21565b6001600160a01b0380891660009081526009602052604080822093909355908816815220546122f590846114f5565b6001600160a01b0387166000908152600960205260409020556123178161272b565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161235c91815260200190565b60405180910390a380156123ab5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806123c3856126ed565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123f09085611f21565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461242690836114f5565b6001600160a01b0387166000908152600a60209081526040808320939093556009905220546122f590846114f5565b600080600080612464856126ed565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124919086611f21565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123f09085611f21565b6000806000806124cf856126ed565b6001600160a01b038b16600090815260096020526040902054939750919550935091506122c69085611f21565b601a60008154811061251057612510612b9d565b9060005260206000200154601681905550601a60018154811061253557612535612b9d565b9060005260206000200154601781905550601a60028154811061255a5761255a612b9d565b600091825260209091200154601855565b6014546013546000918291825b600f548110156126bd578260096000600f848154811061259a5761259a612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612605575081600a6000600f84815481106125de576125de612b9d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561261b57601454601354945094505050509091565b61266160096000600f848154811061263557612635612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f21565b92506126a9600a6000600f848154811061267d5761267d612b9d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f21565b9150806126b581612c9f565b915050612578565b506013546014546126cd916118c9565b8210156126e4576014546013549350935050509091565b90939092509050565b6000806000806000806126ff876127b4565b915091506000806127188984612713611efe565b6127db565b909a909950939750919550919350505050565b6000612735611efe565b90506000612743838361190b565b3060009081526009602052604090205490915061276090826114f5565b30600090815260096020908152604080832093909355600e9052205460ff16156127af57306000908152600a602052604090205461279e90846114f5565b306000908152600a60205260409020555b505050565b60008060006127c284612814565b905060006127d08583611f21565b959194509092505050565b600080806127e9868561190b565b905060006127f7868661190b565b905060006128058383611f21565b92989297509195505050505050565b600080612834601854610aff6017546016546114f590919063ffffffff16565b90506115546103e8611b8a858461190b565b828054828255906000526020600020908101928215612881579160200282015b82811115612881578251825591602001919060010190612866565b5061288d929150612891565b5090565b5b8082111561288d5760008155600101612892565b600060208083528351808285015260005b818110156128d3578581018301518582016040015282016128b7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c8457600080fd5b6000806040838503121561291c57600080fd5b8235612927816128f4565b946020939093013593505050565b60008060006060848603121561294a57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561297657600080fd5b8335612981816128f4565b92506020840135612991816128f4565b929592945050506040919091013590565b6000602082840312156129b457600080fd5b8135611554816128f4565b6000602082840312156129d157600080fd5b5035919050565b80358015158114610d7357600080fd5b600080604083850312156129fb57600080fd5b8235612a06816128f4565b9150612a14602084016129d8565b90509250929050565b600060208284031215612a2f57600080fd5b611554826129d8565b60008060408385031215612a4b57600080fd5b8235612a56816128f4565b91506020830135612a66816128f4565b809150509250929050565b600181811c90821680612a8557607f821691505b602082108103612aa557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8f57610a8f612ae0565b81810381811115610a8f57610a8f612ae0565b8082028115828204841417610a8f57610a8f612ae0565b600082612b5057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bc557600080fd5b8151611554816128f4565b600081518084526020808501945080840160005b83811015612c095781516001600160a01b031687529582019590820190600101612be4565b509495945050505050565b85815284602082015260a060408201526000612c3360a0830186612bd0565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c696040830184612bd0565b949350505050565b600080600060608486031215612c8657600080fd5b8351925060208401519150604084015190509250925092565b600060018201612cb157612cb1612ae0565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122036aea2ebb3c2f31fb6dca7b00d679b7b1d5e2c04a2a195416abc659a6846954564736f6c63430008130033

Deployed Bytecode Sourcemap

5961:20251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7488:77;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;7488:77:0;;;;;;;;9324:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10236:161::-;;;;;;;;;;-1:-1:-1;10236:161:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;10236:161:0;1205:187:1;23377:416:0;;;;;;;;;;-1:-1:-1;23377:416:0;;;;;:::i;:::-;;:::i;:::-;;11231:87;;;;;;;;;;-1:-1:-1;11300:10:0;;11231:87;;8083:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1908:32:1;;;1890:51;;1878:2;1863:18;8083:51:0;1718:229:1;9601:95:0;;;;;;;;;;-1:-1:-1;9681:7:0;;9601:95;;10405:313;;;;;;;;;;-1:-1:-1;10405:313:0;;;;;:::i;:::-;;:::i;9510:83::-;;;;;;;;;;-1:-1:-1;9576:9:0;;9510:83;;9576:9;;;;2555:36:1;;2543:2;2528:18;9510:83:0;2413:184:1;7199:73:0;;;;;;;;;;;;;;;;10726:218;;;;;;;;;;-1:-1:-1;10726:218:0;;;;;:::i;:::-;;:::i;6148:87::-;;;;;;;;;;-1:-1:-1;6148:87:0;;;;-1:-1:-1;;;;;6148:87:0;;;21536:111;;;;;;;;;;-1:-1:-1;21536:111:0;;;;;:::i;:::-;;:::i;25641:222::-;;;;;;;;;;-1:-1:-1;25641:222:0;;;;;:::i;:::-;;:::i;5418:26::-;;;;;;;;;;-1:-1:-1;5418:26:0;;;;;;;;8141:38;;;;;;;;;;;;;;;8220:40;;;;;;;;;;-1:-1:-1;8220:40:0;;;;;;;;;;;5843:109;;;;;;;;;;-1:-1:-1;5843:109:0;;;;;:::i;:::-;;:::i;25490:143::-;;;;;;;;;;-1:-1:-1;25490:143:0;;;;;:::i;:::-;;:::i;21394:134::-;;;;;;;;;;-1:-1:-1;21394:134:0;;;;;:::i;:::-;;:::i;7162:30::-;;;;;;;;;;;;;;;;25988:182;;;;;;;;;;;;;:::i;9704:198::-;;;;;;;;;;-1:-1:-1;9704:198:0;;;;;:::i;:::-;;:::i;3538:148::-;;;;;;;;;;;;;:::i;7877:64::-;;;;;;;;;;;;;;;;7791:53;;;;;;;;;;;;;;;;7572:37;;;;;;;;;;;;;;;;7360:38;;;;;;;;;;;;;;;;3324:79;;;;;;;;;;-1:-1:-1;3362:7:0;3389:6;-1:-1:-1;;;;;3389:6:0;3324:79;;24165:146;;;;;;;;;;-1:-1:-1;24165:146:0;;;;;:::i;:::-;;:::i;22488:469::-;;;;;;;;;;-1:-1:-1;22488:469:0;;;;;:::i;:::-;;:::i;7616:38::-;;;;;;;;;;;;;;;;9415:87;;;;;;;;;;;;;:::i;11326:120::-;;;;;;;;;;-1:-1:-1;11415:23:0;;11326:120;;10952:269;;;;;;;;;;-1:-1:-1;10952:269:0;;;;;:::i;:::-;;:::i;6048:93::-;;;;;;;;;;-1:-1:-1;6048:93:0;;;;-1:-1:-1;;;;;6048:93:0;;;9910:167;;;;;;;;;;-1:-1:-1;9910:167:0;;;;;:::i;:::-;;:::i;25871:109::-;;;;;;;;;;-1:-1:-1;25871:109:0;;;;;:::i;:::-;;:::i;23992:165::-;;;;;;;;;;-1:-1:-1;23992:165:0;;;;;:::i;:::-;;:::i;7700:84::-;;;;;;;;;;;;;;;;24449:176;;;;;;;;;;-1:-1:-1;24449:176:0;;;;;:::i;:::-;;:::i;7118:37::-;;;;;;;;;;;;;;;;7405:38;;;;;;;;;;;;;;;;7450:31;;;;;;;;;;;;;;;;24319:122;;;;;;;;;;-1:-1:-1;24319:122:0;;;;;:::i;:::-;;:::i;6242:68::-;;;;;;;;;;-1:-1:-1;6242:68:0;;;;-1:-1:-1;;;;;6242:68:0;;;22965:402;;;;;;;;;;-1:-1:-1;22965:402:0;;;;;:::i;:::-;;:::i;7075:36::-;;;;;;;;;;;;;;;;10085:143;;;;;;;;;;-1:-1:-1;10085:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10193:18:0;;;10166:7;10193:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10085:143;21655:110;;;;;;;;;;-1:-1:-1;21655:110:0;;;;;:::i;:::-;;:::i;23803:181::-;;;;;;;;;;-1:-1:-1;23803:181:0;;;;;:::i;:::-;;:::i;3694:244::-;;;;;;;;;;-1:-1:-1;3694:244:0;;;;;:::i;:::-;;:::i;6317:66::-;;;;;;;;;;-1:-1:-1;6317:66:0;;;;-1:-1:-1;;;;;6317:66:0;;;5758:77;;;;;;;;;;;;;:::i;7661:32::-;;;;;;;;;;;;;;;;9324:83;9361:13;9394:5;9387:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9324:83;:::o;10236:161::-;10311:4;10328:39;432:10;10351:7;10360:6;10328:8;:39::i;:::-;-1:-1:-1;10385:4:0;10236:161;;;;;:::o;23377:416::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;;;;;;;;;23518:18:::1;:34:::0;;;23563:18:::1;:34:::0;;;23608:12:::1;:22:::0;;;23623:7;23660:37:::1;23584:13:::0;23539;23660:37:::1;:::i;:::-;:50;;;;:::i;:::-;23641:16;:69:::0;23721:16:::1;23740:45;23777:7:::0;23740:32:::1;:13:::0;23758;23740:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;-1:-1:-1::0;;;;;23377:416:0:o;10405:313::-;10503:4;10520:36;10530:6;10538:9;10549:6;10520:9;:36::i;:::-;10567:121;10576:6;432:10;10598:89;10636:6;10598:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10598:19:0;;;;;;:11;:19;;;;;;;;432:10;10598:33;;;;;;;;;;:37;:89::i;:::-;10567:8;:121::i;:::-;-1:-1:-1;10706:4:0;10405:313;;;;;:::o;10726:218::-;432:10;10814:4;10863:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10863:34:0;;;;;;;;;;10814:4;;10831:83;;10854:7;;10863:50;;10902:10;10863:38;:50::i;21536:111::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21605:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;21605:34:0::1;21635:4;21605:34;::::0;;21536:111::o;25641:222::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;25726:22:::1;:32:::0;;;25802:7:::1;::::0;:23:::1;::::0;25823:1:::1;::::0;25802:16:::1;::::0;25814:3:::1;25802:11;:16::i;:::-;:20:::0;::::1;:23::i;:::-;25777:22;;:48;25769:75;;;::::0;-1:-1:-1;;;25769:75:0;;5744:2:1;25769:75:0::1;::::0;::::1;5726:21:1::0;5783:2;5763:18;;;5756:30;-1:-1:-1;;;5802:18:1;;;5795:44;5856:18;;25769:75:0::1;5542:338:1::0;25769:75:0::1;25641:222:::0;:::o;5843:109::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5917:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;5917:27:0::1;5940:4;5917:27;::::0;;5843:109::o;25490:143::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25585:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;25585:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25490:143::o;21394:134::-;21468:4;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21493:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;3521:1;21394:134:::0;;;:::o;25988:182::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;26066:49:::1;::::0;26048:12:::1;::::0;26066:10:::1;::::0;26089:21:::1;::::0;26048:12;26066:49;26048:12;26066:49;26089:21;26066:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26047:68;;;26134:7;26126:36;;;::::0;-1:-1:-1;;;26126:36:0;;6297:2:1;26126:36:0::1;::::0;::::1;6279:21:1::0;6336:2;6316:18;;;6309:30;-1:-1:-1;;;6355:18:1;;;6348:46;6411:18;;26126:36:0::1;6095:340:1::0;9704:198:0;-1:-1:-1;;;;;9794:20:0;;9770:7;9794:20;;;:11;:20;;;;;;;;9790:49;;;-1:-1:-1;;;;;;9823:16:0;;;;;:7;:16;;;;;;;9704:198::o;9790:49::-;-1:-1:-1;;;;;9877:16:0;;;;;;:7;:16;;;;;;9857:37;;:19;:37::i;3538:148::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;3645:1:::1;3629:6:::0;;3608:40:::1;::::0;-1:-1:-1;;;;;3629:6:0;;::::1;::::0;3608:40:::1;::::0;3645:1;;3608:40:::1;3676:1;3659:19:::0;;-1:-1:-1;;;;;;3659:19:0::1;::::0;;3538:148::o;24165:146::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;24258:16:::1;:45:::0;;-1:-1:-1;;;;;;24258:45:0::1;-1:-1:-1::0;;;;;24258:45:0;;;::::1;::::0;;;::::1;::::0;;24165:146::o;22488:469::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;22624:16:::1;:32:::0;;;22667:16:::1;:32:::0;;;22710:10:::1;:20:::0;;;22741:64:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:64:::1;;:::i;:::-;-1:-1:-1::0;22816:16:0::1;22835:45;22872:7:::0;22835:32:::1;:13:::0;22853;22835:17:::1;:32::i;:45::-;22816:64;;22939:10;;22922:16;;22905;;:33;;;;:::i;:::-;:44;;;;:::i;:::-;22891:11;:58:::0;-1:-1:-1;;;;22488:469:0:o;9415:87::-;9454:13;9487:7;9480:14;;;;;:::i;10952:269::-;11045:4;11062:129;432:10;11085:7;11094:96;11133:15;11094:96;;;;;;;;;;;;;;;;;432:10;11094:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11094:34:0;;;;;;;;;;;;:38;:96::i;9910:167::-;9988:4;10005:42;432:10;10029:9;10040:6;10005:9;:42::i;25871:109::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;23992:165::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;24099:23:::1;:50:::0;23992:165::o;24449:176::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;24531:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;24531:32:0;;::::1;;::::0;;24579:38:::1;::::0;::::1;::::0;::::1;::::0;24555:8;1370:14:1;1363:22;1345:41;;1333:2;1318:18;;1205:187;24579:38:0::1;;;;;;;;24449:176:::0;:::o;24319:122::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;24400:10:::1;:33:::0;;-1:-1:-1;;;;;;24400:33:0::1;-1:-1:-1::0;;;;;24400:33:0;;;::::1;::::0;;;::::1;::::0;;24319:122::o;22965:402::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;23102:17:::1;:33:::0;;;23146:17:::1;:33:::0;;;23190:11:::1;:21:::0;;;-1:-1:-1;23241:45:0::1;23204:7:::0;23241:32:::1;23122:13:::0;23166;23241:17:::1;:32::i;:45::-;23222:64;;23348:11;;23330:17;;23312;;:35;;;;:::i;:::-;:47;;;;:::i;:::-;23297:12;:62:::0;-1:-1:-1;;;;22965:402:0:o;21655:110::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21722:27:0::1;21752:5;21722:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;21722:35:0::1;::::0;;21655:110::o;23803:181::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;23885:12:::1;:26:::0;;;23944:7:::1;::::0;:14:::1;::::0;23956:1:::1;23944:11;:14::i;:::-;23930:12;;:28;;23922:54;;;::::0;-1:-1:-1;;;23922:54:0;;6642:2:1;23922:54:0::1;::::0;::::1;6624:21:1::0;6681:2;6661:18;;;6654:30;-1:-1:-1;;;6700:18:1;;;6693:43;6753:18;;23922:54:0::1;6440:337:1::0;3694:244:0;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3783:22:0;::::1;3775:73;;;::::0;-1:-1:-1;;;3775:73:0;;6984:2:1;3775:73:0::1;::::0;::::1;6966:21:1::0;7023:2;7003:18;;;6996:30;7062:34;7042:18;;;7035:62;-1:-1:-1;;;7113:18:1;;;7106:36;7159:19;;3775:73:0::1;6782:402:1::0;3775:73:0::1;3885:6;::::0;;3864:38:::1;::::0;-1:-1:-1;;;;;3864:38:0;;::::1;::::0;3885:6;::::1;::::0;3864:38:::1;::::0;::::1;3913:6;:17:::0;;-1:-1:-1;;;;;;3913:17:0::1;-1:-1:-1::0;;;;;3913:17:0;;;::::1;::::0;;;::::1;::::0;;3694:244::o;5758:77::-;3451:6;;-1:-1:-1;;;;;3451:6:0;432:10;3451:22;3443:67;;;;-1:-1:-1;;;3443:67:0;;;;;;;:::i;:::-;5814:6:::1;:13:::0;;-1:-1:-1;;5814:13:0::1;5823:4;5814:13;::::0;;5758:77::o;11716:340::-;-1:-1:-1;;;;;11814:19:0;;11806:68;;;;-1:-1:-1;;;11806:68:0;;7391:2:1;11806:68:0;;;7373:21:1;7430:2;7410:18;;;7403:30;7469:34;7449:18;;;7442:62;-1:-1:-1;;;7520:18:1;;;7513:34;7564:19;;11806:68:0;7189:400:1;11806:68:0;-1:-1:-1;;;;;11893:21:0;;11885:68;;;;-1:-1:-1;;;11885:68:0;;7796:2:1;11885:68:0;;;7778:21:1;7835:2;7815:18;;;7808:30;7874:34;7854:18;;;7847:62;-1:-1:-1;;;7925:18:1;;;7918:32;7967:19;;11885:68:0;7594:398:1;11885:68:0;-1:-1:-1;;;;;11964:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12016:32;;160:25:1;;;12016:32:0;;133:18:1;12016:32:0;;;;;;;11716:340;;;:::o;1403:181::-;1461:7;;1493:5;1497:1;1493;:5;:::i;:::-;1481:17;;1522:1;1517;:6;;1509:46;;;;-1:-1:-1;;;1509:46:0;;8199:2:1;1509:46:0;;;8181:21:1;8238:2;8218:18;;;8211:30;8277:29;8257:18;;;8250:57;8324:18;;1509:46:0;7997:351:1;1509:46:0;1575:1;1403:181;-1:-1:-1;;;1403:181:0:o;12064:1256::-;5560:6;;12138:4;;12144:2;;5560:6;;;:26;;-1:-1:-1;;;;;;5570:16:0;;;;;;:10;:16;;;;;;;;5560:26;:44;;;-1:-1:-1;;;;;;5590:14:0;;;;;;:10;:14;;;;;;;;5560:44;5552:65;;;;-1:-1:-1;;;5552:65:0;;8555:2:1;5552:65:0;;;8537:21:1;8594:1;8574:18;;;8567:29;-1:-1:-1;;;8612:18:1;;;8605:38;8660:18;;5552:65:0;8353:331:1;5552:65:0;-1:-1:-1;;;;;12172:18:0;::::1;12164:68;;;::::0;-1:-1:-1;;;12164:68:0;;8891:2:1;12164:68:0::1;::::0;::::1;8873:21:1::0;8930:2;8910:18;;;8903:30;8969:34;8949:18;;;8942:62;-1:-1:-1;;;9020:18:1;;;9013:35;9065:19;;12164:68:0::1;8689:401:1::0;12164:68:0::1;-1:-1:-1::0;;;;;12251:16:0;::::1;12243:64;;;::::0;-1:-1:-1;;;12243:64:0;;9297:2:1;12243:64:0::1;::::0;::::1;9279:21:1::0;9336:2;9316:18;;;9309:30;9375:34;9355:18;;;9348:62;-1:-1:-1;;;9426:18:1;;;9419:33;9469:19;;12243:64:0::1;9095:399:1::0;12243:64:0::1;12335:1;12326:6;:10;12318:64;;;::::0;-1:-1:-1;;;12318:64:0;;9701:2:1;12318:64:0::1;::::0;::::1;9683:21:1::0;9740:2;9720:18;;;9713:30;9779:34;9759:18;;;9752:62;-1:-1:-1;;;9830:18:1;;;9823:39;9879:19;;12318:64:0::1;9499:405:1::0;12318:64:0::1;3362:7:::0;3389:6;-1:-1:-1;;;;;12396:15:0;;::::1;3389:6:::0;;12396:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3362:7:0;3389:6;-1:-1:-1;;;;;12415:13:0;;::::1;3389:6:::0;;12415:13:::1;;12396:32;12393:139;;;12463:12;;12453:6;:22;;12445:75;;;::::0;-1:-1:-1;;;12445:75:0;;10111:2:1;12445:75:0::1;::::0;::::1;10093:21:1::0;10150:2;10130:18;;;10123:30;10189:34;10169:18;;;10162:62;-1:-1:-1;;;10240:18:1;;;10233:38;10288:19;;12445:75:0::1;9909:404:1::0;12445:75:0::1;12544:28;12575:24;12593:4;12575:9;:24::i;:::-;12665:23;::::0;12544:55;;-1:-1:-1;12641:47:0;::::1;;12701:31;12715:4:::0;12721:2;12725:6;12701:13:::1;:31::i;:::-;12750:16;::::0;::::1;;12749:17;:42:::0;::::1;;;-1:-1:-1::0;12770:21:0::1;::::0;::::1;::::0;::::1;;;12749:42;:67;;;;;12803:13;-1:-1:-1::0;;;;;12795:21:0::1;:4;-1:-1:-1::0;;;;;12795:21:0::1;;;12749:67;12745:282;;;12846:23;12842:174;;;12926:23;;12903:46;;12968:32;12979:20;12968:10;:32::i;:::-;-1:-1:-1::0;;;;;13158:24:0;::::1;13039:12;13158:24:::0;;;:18:::1;:24;::::0;;;;;13054:4:::1;::::0;13158:24:::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;13186:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;13158:50;13155:106;;;-1:-1:-1::0;13244:5:0::1;13155:106;13271:41;13286:4;13292:2;13296:6;13304:7;13271:14;:41::i;:::-;12153:1167;;;12064:1256:::0;;;;;:::o;1736:192::-;1822:7;1858:12;1850:6;;;;1842:29;;;;-1:-1:-1;;;1842:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1882:9:0;1894:5;1898:1;1894;:5;:::i;:::-;1882:17;1736:192;-1:-1:-1;;;;;1736:192:0:o;2196:132::-;2254:7;2281:39;2285:1;2288;2281:39;;;;;;;;;;;;;;;;;:3;:39::i;1936:250::-;1994:7;2018:1;2023;2018:6;2014:47;;-1:-1:-1;2048:1:0;2041:8;;2014:47;2073:9;2085:5;2089:1;2085;:5;:::i;:::-;2073:17;-1:-1:-1;2118:1:0;2109:5;2113:1;2073:17;2109:5;:::i;:::-;:10;2101:56;;;;-1:-1:-1;;;2101:56:0;;11048:2:1;2101:56:0;;;11030:21:1;11087:2;11067:18;;;11060:30;11126:34;11106:18;;;11099:62;-1:-1:-1;;;11177:18:1;;;11170:31;11218:19;;2101:56:0;10846:397:1;11454:254:0;11521:7;11560;;11549;:18;;11541:73;;;;-1:-1:-1;;;11541:73:0;;11450:2:1;11541:73:0;;;11432:21:1;11489:2;11469:18;;;11462:30;11528:34;11508:18;;;11501:62;-1:-1:-1;;;11579:18:1;;;11572:40;11629:19;;11541:73:0;11248:406:1;11541:73:0;11625:19;11648:10;:8;:10::i;:::-;11625:33;-1:-1:-1;11676:24:0;:7;11625:33;11676:11;:24::i;24949:533::-;25044:18;25065:25;25083:6;25065:13;25075:2;25065:9;:13::i;:25::-;-1:-1:-1;;;;;25105:26:0;;;;;;:20;:26;;;;;;25044:46;;-1:-1:-1;25105:26:0;;25104:27;:56;;;;-1:-1:-1;;;;;;25136:24:0;;;;;;:20;:24;;;;;;;;25135:25;25104:56;25101:186;;;25208:22;;25194:10;:36;;25186:89;;;;-1:-1:-1;;;25186:89:0;;;;;;;:::i;:::-;25306:13;-1:-1:-1;;;;;25300:19:0;:4;-1:-1:-1;;;;;25300:19:0;;:48;;;;-1:-1:-1;;;;;;25324:24:0;;;;;;:20;:24;;;;;;;;25323:25;25300:48;25297:178;;;25396:22;;25382:10;:36;;25374:89;;;;-1:-1:-1;;;25374:89:0;;;;;;;:::i;:::-;25033:449;24949:533;;;:::o;13330:1314::-;8593:16;:23;;-1:-1:-1;;8593:23:0;8612:4;8593:23;;;13484:10:::1;::::0;13462:16:::1;::::0;13441::::1;::::0;8593;;13441:54:::1;::::0;13484:10;;13441:38:::1;::::0;:20:::1;:38::i;:54::-;13416:79;;13510:22;13535:57;13580:11;;13535:40;13557:17;;13535;;:21;;:40;;;;:::i;:57::-;13510:82:::0;-1:-1:-1;13603:25:0::1;13631:33;:13:::0;13510:82;13631:17:::1;:33::i;:::-;13603:61;;13677:27;13707:90;13795:1;13707:83;13772:17;13707:60;13749:17;;13732:16;;:34;;;;:::i;:::-;13707:20:::0;;:24:::1;:60::i;:::-;:64:::0;::::1;:83::i;:90::-;13677:120:::0;-1:-1:-1;13808:22:0::1;13833:45;:20:::0;13677:120;13833:24:::1;:45::i;:::-;13808:70;;13889:32;13906:14;13889:16;:32::i;:::-;13934:18;13955:21;13934:42;;13987:23;14013:80;14091:1;14013:73;14068:17;14013:50;14045:17;;14028:16;;:34;;;;:::i;:::-;14013:10:::0;;:14:::1;:50::i;:80::-;13987:106;;14129:1;14109:19;:21;:42;;;;;14150:1;14134:15;:17;14109:42;14106:133;;;14177:50;14190:19;14211:15;14177:12;:50::i;:::-;14251:23;14277:73;14332:17;14277:50;14309:17;;14292:16;;:34;;;;:::i;:::-;14277:10:::0;;:14:::1;:50::i;:73::-;14251:99:::0;-1:-1:-1;14364:17:0;;14361:99:::1;;14406:16;::::0;:42:::1;::::0;-1:-1:-1;;;;;14406:16:0;;::::1;::::0;:42;::::1;;;::::0;14432:15;;14406:16:::1;:42:::0;:16;:42;14432:15;14406:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14361:99;14472:17;14492:52;14528:15:::0;14492:31:::1;:10:::0;14507:15;14492:14:::1;:31::i;:::-;:35:::0;::::1;:52::i;:::-;14472:72:::0;-1:-1:-1;14558:11:0;;14555:82:::1;;14595:10;::::0;:30:::1;::::0;-1:-1:-1;;;;;14595:10:0;;::::1;::::0;:30;::::1;;;::::0;14615:9;;14595:10:::1;:30:::0;:10;:30;14615:9;14595:10;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14555:82;-1:-1:-1::0;;8639:16:0;:24;;-1:-1:-1;;8639:24:0;;;-1:-1:-1;;;;;;;;13330:1314:0:o;15714:985::-;15830:7;15826:355;;15864:14;21835:1;21816:16;:20;;;21847:16;:20;;;21878:10;:14;21773:127;15864:14;15826:355;;;15943:13;-1:-1:-1;;;;;15932:24:0;:9;-1:-1:-1;;;;;15932:24:0;;15929:89;;15990:12;22159:17;;22140:16;:36;22206:17;;22187:16;:36;22247:11;;22234:10;:24;22094:172;15990:12;16047:13;-1:-1:-1;;;;;16037:23:0;:6;-1:-1:-1;;;;;16037:23:0;;;:53;;;;;16077:13;-1:-1:-1;;;;;16064:26:0;:9;-1:-1:-1;;;;;16064:26:0;;;16037:53;16034:136;;;16124:30;22360:18;;22341:16;:37;22408:18;;22389:16;:37;22450:12;;22437:10;:25;22276:202;16124:30;-1:-1:-1;;;;;16199:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;16223:22:0;;;;;;:11;:22;;;;;;;;16222:23;16199:46;16195:467;;;16262:48;16284:6;16292:9;16303:6;16262:21;:48::i;:::-;16195:467;;;-1:-1:-1;;;;;16333:19:0;;;;;;:11;:19;;;;;;;;16332:20;:46;;;;-1:-1:-1;;;;;;16356:22:0;;;;;;:11;:22;;;;;;;;16332:46;16328:334;;;16395:46;16415:6;16423:9;16434:6;16395:19;:46::i;16328:334::-;-1:-1:-1;;;;;16463:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;16486:22:0;;;;;;:11;:22;;;;;;;;16463:45;16459:203;;;16525:48;16547:6;16555:9;16566:6;16525:21;:48::i;16459:203::-;16606:44;16624:6;16632:9;16643:6;16606:17;:44::i;:::-;16674:15;:13;:15::i;2336:278::-;2422:7;2457:12;2450:5;2442:28;;;;-1:-1:-1;;;2442:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2481:9:0;2493:5;2497:1;2493;:5;:::i;20060:163::-;20101:7;20122:15;20139;20158:19;:17;:19::i;:::-;20121:56;;-1:-1:-1;20121:56:0;-1:-1:-1;20195:20:0;20121:56;;20195:11;:20::i;:::-;20188:27;;;;20060:163;:::o;1592:136::-;1650:7;1677:43;1681:1;1684;1677:43;;;;;;;;;;;;;;;;;:3;:43::i;14652:527::-;14747:16;;;14761:1;14747:16;;;;;;;;14723:21;;14747:16;;;;;;;;;;-1:-1:-1;14747:16:0;14723:40;;14792:4;14774;14779:1;14774:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;14774:23:0;;;-1:-1:-1;;;;;14774:23:0;;;;;14818:15;-1:-1:-1;;;;;14818:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14808:4;14813:1;14808:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;14808:32:0;;;-1:-1:-1;;;;;14808:32:0;;;;;14851:62;14868:4;14883:15;14901:11;14851:8;:62::i;:::-;14924:196;;-1:-1:-1;;;14924:196:0;;-1:-1:-1;;;;;14924:15:0;:66;;;;:196;;15005:11;;15031:1;;15047:4;;15074;;15094:15;;14924:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15136:35;15153:11;15166:4;15136:35;;;;;;;:::i;:::-;;;;;;;;14712:467;14652:527;:::o;15191:513::-;15339:62;15356:4;15371:15;15389:11;15339:8;:62::i;:::-;15444:15;-1:-1:-1;;;;;15444:31:0;;15483:9;15516:4;15536:11;15562:1;15605;15648:7;3362;3389:6;-1:-1:-1;;;;;3389:6:0;;3324:79;15648:7;15444:252;;;;;;-1:-1:-1;;;;;;15444:252:0;;;-1:-1:-1;;;;;14337:15:1;;;15444:252:0;;;14319:34:1;14369:18;;;14362:34;;;;14412:18;;;14405:34;;;;14455:18;;;14448:34;14519:15;;;14498:19;;;14491:44;15670:15:0;14551:19:1;;;14544:35;14253:19;;15444:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17836:579::-;17939:15;17956:23;17981;18006:18;18028:19;18039:7;18028:10;:19::i;:::-;-1:-1:-1;;;;;18073:15:0;;;;;;:7;:15;;;;;;17938:109;;-1:-1:-1;17938:109:0;;-1:-1:-1;17938:109:0;-1:-1:-1;17938:109:0;-1:-1:-1;18073:28:0;;18093:7;18073:19;:28::i;:::-;-1:-1:-1;;;;;18055:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18130:7;:15;;;;:28;;18150:7;18130:19;:28::i;:::-;-1:-1:-1;;;;;18112:15:0;;;;;;;:7;:15;;;;;;:46;;;;18190:18;;;;;;;:39;;18213:15;18190:22;:39::i;:::-;-1:-1:-1;;;;;18169:18:0;;;;;;:7;:18;;;;;:60;18240:26;18255:10;18240:14;:26::i;:::-;18299:9;-1:-1:-1;;;;;18282:44:0;18291:6;-1:-1:-1;;;;;18282:44:0;;18310:15;18282:44;;;;160:25:1;;148:2;133:18;;14:177;18282:44:0;;;;;;;;18340:12;;18337:71;;18362:43;;160:25:1;;;18387:4:0;;-1:-1:-1;;;;;18362:43:0;;;;;148:2:1;133:18;18362:43:0;;;;;;;18337:71;17927:488;;;;17836:579;;;:::o;17237:591::-;17338:15;17355:23;17380;17405:18;17427:19;17438:7;17427:10;:19::i;:::-;-1:-1:-1;;;;;17472:15:0;;;;;;:7;:15;;;;;;17337:109;;-1:-1:-1;17337:109:0;;-1:-1:-1;17337:109:0;-1:-1:-1;17337:109:0;-1:-1:-1;17472:28:0;;17337:109;17472:19;:28::i;:::-;-1:-1:-1;;;;;17454:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;17532:18;;;;;:7;:18;;;;;:39;;17555:15;17532:22;:39::i;:::-;-1:-1:-1;;;;;17511:18:0;;;;;;:7;:18;;;;;;;;:60;;;;17603:7;:18;;;;:39;;17626:15;17603:22;:39::i;18423:650::-;18526:15;18543:23;18568;18593:18;18615:19;18626:7;18615:10;:19::i;:::-;-1:-1:-1;;;;;18660:15:0;;;;;;:7;:15;;;;;;18525:109;;-1:-1:-1;18525:109:0;;-1:-1:-1;18525:109:0;-1:-1:-1;18525:109:0;-1:-1:-1;18660:28:0;;18680:7;18660:19;:28::i;:::-;-1:-1:-1;;;;;18642:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18717:7;:15;;;;:28;;18737:7;18717:19;:28::i;16707:522::-;16806:15;16823:23;16848;16874:18;16896:19;16907:7;16896:10;:19::i;:::-;-1:-1:-1;;;;;16944:15:0;;;;;;:7;:15;;;;;;16805:110;;-1:-1:-1;16805:110:0;;-1:-1:-1;16805:110:0;-1:-1:-1;16805:110:0;-1:-1:-1;16944:28:0;;16805:110;16944:19;:28::i;21908:178::-;21976:13;21990:1;21976:16;;;;;;;;:::i;:::-;;;;;;;;;21957;:35;;;;22022:13;22036:1;22022:16;;;;;;;;:::i;:::-;;;;;;;;;22003;:35;;;;22062:13;22076:1;22062:16;;;;;;;;:::i;:::-;;;;;;;;;;;22049:10;:29;21908:178::o;20231:555::-;20328:7;;20364;;20281;;;;;20382:289;20406:9;:16;20402:20;;20382:289;;;20472:7;20448;:21;20456:9;20466:1;20456:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20456:12:0;20448:21;;;;;;;;;;;;;:31;;:66;;;20507:7;20483;:21;20491:9;20501:1;20491:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20491:12:0;20483:21;;;;;;;;;;;;;:31;20448:66;20444:97;;;20524:7;;20533;;20516:25;;;;;;;20231:555;;:::o;20444:97::-;20566:34;20578:7;:21;20586:9;20596:1;20586:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20586:12:0;20578:21;;;;;;;;;;;;;20566:7;;:11;:34::i;:::-;20556:44;;20625:34;20637:7;:21;20645:9;20655:1;20645:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20645:12:0;20637:21;;;;;;;;;;;;;20625:7;;:11;:34::i;:::-;20615:44;-1:-1:-1;20424:3:0;;;;:::i;:::-;;;;20382:289;;;-1:-1:-1;20707:7:0;;20695;;:20;;:11;:20::i;:::-;20685:7;:30;20681:61;;;20725:7;;20734;;20717:25;;;;;;20231:555;;:::o;20681:61::-;20761:7;;20770;;-1:-1:-1;20231:555:0;-1:-1:-1;20231:555:0:o;19083:355::-;19142:7;19151;19160;19169;19190:23;19215:18;19237:20;19249:7;19237:11;:20::i;:::-;19189:68;;;;19269:15;19286:23;19313:44;19325:7;19334:10;19346;:8;:10::i;:::-;19313:11;:44::i;:::-;19268:89;;;;-1:-1:-1;19402:15:0;;-1:-1:-1;19419:10:0;;-1:-1:-1;19083:355:0;;-1:-1:-1;;;;19083:355:0:o;20794:368::-;20857:19;20880:10;:8;:10::i;:::-;20857:33;-1:-1:-1;20901:18:0;20922:27;:10;20857:33;20922:14;:27::i;:::-;21001:4;20985:22;;;;:7;:22;;;;;;20901:48;;-1:-1:-1;20985:38:0;;20901:48;20985:26;:38::i;:::-;20976:4;20960:22;;;;:7;:22;;;;;;;;:63;;;;21037:11;:26;;;;;;21034:121;;;21121:4;21105:22;;;;:7;:22;;;;;;:38;;21132:10;21105:26;:38::i;:::-;21096:4;21080:22;;;;:7;:22;;;;;:63;21034:121;20846:316;;20794:368;:::o;19446:255::-;19506:7;19515;19535:18;19556:30;19578:7;19556:21;:30::i;:::-;19535:51;-1:-1:-1;19597:23:0;19623;:7;19535:51;19623:11;:23::i;:::-;19597:49;19682:10;;-1:-1:-1;19446:255:0;;-1:-1:-1;;;19446:255:0:o;19709:343::-;19810:7;;;19857:24;:7;19869:11;19857;:24::i;:::-;19839:42;-1:-1:-1;19892:18:0;19913:27;:10;19928:11;19913:14;:27::i;:::-;19892:48;-1:-1:-1;19951:23:0;19977;:7;19892:48;19977:11;:23::i;:::-;20019:7;;;;-1:-1:-1;19709:343:0;;-1:-1:-1;;;;;;19709:343:0:o;21172:212::-;21242:7;21262:12;21277:54;21320:10;;21277:38;21298:16;;21277;;:20;;:38;;;;:::i;:54::-;21262:69;-1:-1:-1;21349:27:0;21371:4;21349:17;:7;21262:69;21349:11;:17::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:316::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;-1:-1:-1;;1582:23:1;;;1652:2;1637:18;;1624:32;;-1:-1:-1;1703:2:1;1688:18;;;1675:32;;1397:316;-1:-1:-1;1397:316:1:o;1952:456::-;2029:6;2037;2045;2098:2;2086:9;2077:7;2073:23;2069:32;2066:52;;;2114:1;2111;2104:12;2066:52;2153:9;2140:23;2172:31;2197:5;2172:31;:::i;:::-;2222:5;-1:-1:-1;2279:2:1;2264:18;;2251:32;2292:33;2251:32;2292:33;:::i;:::-;1952:456;;2344:7;;-1:-1:-1;;;2398:2:1;2383:18;;;;2370:32;;1952:456::o;2826:247::-;2885:6;2938:2;2926:9;2917:7;2913:23;2909:32;2906:52;;;2954:1;2951;2944:12;2906:52;2993:9;2980:23;3012:31;3037:5;3012:31;:::i;3078:180::-;3137:6;3190:2;3178:9;3169:7;3165:23;3161:32;3158:52;;;3206:1;3203;3196:12;3158:52;-1:-1:-1;3229:23:1;;3078:180;-1:-1:-1;3078:180:1:o;3471:160::-;3536:20;;3592:13;;3585:21;3575:32;;3565:60;;3621:1;3618;3611:12;3636:315;3701:6;3709;3762:2;3750:9;3741:7;3737:23;3733:32;3730:52;;;3778:1;3775;3768:12;3730:52;3817:9;3804:23;3836:31;3861:5;3836:31;:::i;:::-;3886:5;-1:-1:-1;3910:35:1;3941:2;3926:18;;3910:35;:::i;:::-;3900:45;;3636:315;;;;;:::o;3956:180::-;4012:6;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;4104:26;4120:9;4104:26;:::i;4141:388::-;4209:6;4217;4270:2;4258:9;4249:7;4245:23;4241:32;4238:52;;;4286:1;4283;4276:12;4238:52;4325:9;4312:23;4344:31;4369:5;4344:31;:::i;:::-;4394:5;-1:-1:-1;4451:2:1;4436:18;;4423:32;4464:33;4423:32;4464:33;:::i;:::-;4516:7;4506:17;;;4141:388;;;;;:::o;4534:380::-;4613:1;4609:12;;;;4656;;;4677:61;;4731:4;4723:6;4719:17;4709:27;;4677:61;4784:2;4776:6;4773:14;4753:18;4750:38;4747:161;;4830:10;4825:3;4821:20;4818:1;4811:31;4865:4;4862:1;4855:15;4893:4;4890:1;4883:15;4747:161;;4534:380;;;:::o;4919:356::-;5121:2;5103:21;;;5140:18;;;5133:30;5199:34;5194:2;5179:18;;5172:62;5266:2;5251:18;;4919:356::o;5280:127::-;5341:10;5336:3;5332:20;5329:1;5322:31;5372:4;5369:1;5362:15;5396:4;5393:1;5386:15;5412:125;5477:9;;;5498:10;;;5495:36;;;5511:18;;:::i;10318:128::-;10385:9;;;10406:11;;;10403:37;;;10420:18;;:::i;10451:168::-;10524:9;;;10555;;10572:15;;;10566:22;;10552:37;10542:71;;10593:18;;:::i;10624:217::-;10664:1;10690;10680:132;;10734:10;10729:3;10725:20;10722:1;10715:31;10769:4;10766:1;10759:15;10797:4;10794:1;10787:15;10680:132;-1:-1:-1;10826:9:1;;10624:217::o;11659:404::-;11861:2;11843:21;;;11900:2;11880:18;;;11873:30;11939:34;11934:2;11919:18;;11912:62;-1:-1:-1;;;12005:2:1;11990:18;;11983:38;12053:3;12038:19;;11659:404::o;12200:127::-;12261:10;12256:3;12252:20;12249:1;12242:31;12292:4;12289:1;12282:15;12316:4;12313:1;12306:15;12332:251;12402:6;12455:2;12443:9;12434:7;12430:23;12426:32;12423:52;;;12471:1;12468;12461:12;12423:52;12503:9;12497:16;12522:31;12547:5;12522:31;:::i;12588:461::-;12641:3;12679:5;12673:12;12706:6;12701:3;12694:19;12732:4;12761:2;12756:3;12752:12;12745:19;;12798:2;12791:5;12787:14;12819:1;12829:195;12843:6;12840:1;12837:13;12829:195;;;12908:13;;-1:-1:-1;;;;;12904:39:1;12892:52;;12964:12;;;;12999:15;;;;12940:1;12858:9;12829:195;;;-1:-1:-1;13040:3:1;;12588:461;-1:-1:-1;;;;;12588:461:1:o;13054:582::-;13353:6;13342:9;13335:25;13396:6;13391:2;13380:9;13376:18;13369:34;13439:3;13434:2;13423:9;13419:18;13412:31;13316:4;13460:57;13512:3;13501:9;13497:19;13489:6;13460:57;:::i;:::-;-1:-1:-1;;;;;13553:32:1;;;;13548:2;13533:18;;13526:60;-1:-1:-1;13617:3:1;13602:19;13595:35;13452:65;13054:582;-1:-1:-1;;;13054:582:1:o;13641:332::-;13848:6;13837:9;13830:25;13891:2;13886;13875:9;13871:18;13864:30;13811:4;13911:56;13963:2;13952:9;13948:18;13940:6;13911:56;:::i;:::-;13903:64;13641:332;-1:-1:-1;;;;13641:332:1:o;14590:306::-;14678:6;14686;14694;14747:2;14735:9;14726:7;14722:23;14718:32;14715:52;;;14763:1;14760;14753:12;14715:52;14792:9;14786:16;14776:26;;14842:2;14831:9;14827:18;14821:25;14811:35;;14886:2;14875:9;14871:18;14865:25;14855:35;;14590:306;;;;;:::o;14901:135::-;14940:3;14961:17;;;14958:43;;14981:18;;:::i;:::-;-1:-1:-1;15028:1:1;15017:13;;14901:135::o

Swarm Source

ipfs://36aea2ebb3c2f31fb6dca7b00d679b7b1d5e2c04a2a195416abc659a68469545
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.