ETH Price: $3,297.69 (-1.70%)

Token

Sharkorse (SHARKORSE)
 

Overview

Max Total Supply

100,000,000,000 SHARKORSE

Holders

162

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,247,108.051465733107563554 SHARKORSE

Value
$0.00
0x54cf2fc9b1de5108645ff513f6c65570a4d0897d
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:
SHARKORSE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-30
*/

// Contract has been created by <DEVAI> a Telegram AI bot. Visit https://t.me/ContractDevAI

// Project Telegram: https://t.me/sharkorse_eth

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

    function includeManyToWhiteList(address[] memory _addresses) public onlyOwner {
        for(uint i=0; i<_addresses.length; i++){
            _whiteList[_addresses[i]] = true;
        }
    }
}

contract SHARKORSE is Context, IERC20, LockToken 
{
    using SafeMath for uint256;
    address payable public marketingAddress = payable(0x5D6AdF875F9BEDaf5777dE23f00745c3D8F75f40);
    address payable public devAddress = payable(0x7acd853f97AEDD4d14750014eD2f533BD979d002);
    address public newOwner = 0x7acd853f97AEDD4d14750014eD2f533BD979d002;
    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 = "Sharkorse";
    string private _symbol = "SHARKORSE";
    uint8 private _decimals = 18;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 300;
    uint256 public _buyDevFee = 0;

    uint256 public buyTotalFee = _buyLiquidityFee+_buyMarketingFee+_buyDevFee;
    uint256[] public buyFeesBackup = [_buyLiquidityFee, _buyMarketingFee, _buyDevFee];

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 400;
    uint256 public  _sellDevFee = 0;
    uint256 public sellTotalFee = _sellLiquidityFee+_sellMarketingFee+_sellDevFee;

    uint256 public _tfrLiquidityFee = 0;
    uint256 public _tfrMarketingFee = 0;
    uint256 public  _tfrDevFee = 0;
    uint256 public transferTotalFee = _tfrLiquidityFee+_tfrMarketingFee+_tfrDevFee;

    uint256 public _maxTxAmount = _tTotal.div(1000).mul(10); //x% of total supply
    uint256 public _walletHoldingMaxLimit =  _tTotal.div(1000).mul(20); //x% of total supply
    uint256 private minimumTokensBeforeSwap = 500000000 * 10**_decimals;
     
        
    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;
        emit Transfer(address(0), newOwner, _tTotal);
        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;
        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
            address(0),
            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 excludeFromFeeMany(address[] memory accounts) public onlyOwner {
        for(uint i=0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = 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 = _tfrLiquidityFee;
        _buyMarketingFee = _tfrMarketingFee;
        _buyDevFee = _tfrDevFee;        
    }


    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;
        require(totalFee<=1000, "Too High Fee");
    }

    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;
        require(totalFee<=1000, "Too High Fee");
    }


    function setTransferFeePercentages(uint256 _liquidityFee, uint256  _marketingFee, uint256 _devFee)
    external onlyOwner()
    {
        _tfrLiquidityFee = _liquidityFee;
        _tfrMarketingFee = _marketingFee;
        _tfrDevFee = _devFee;
        transferTotalFee = _tfrLiquidityFee+_tfrMarketingFee+_tfrDevFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        require(totalFee<=1000, "Too High Fee");
    }


    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner()
    {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount >= _tTotal.div(10000).mul(1), "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 setExcludedFromWhaleMany(address[] memory accounts, bool _enabled) public onlyOwner
    {
        for(uint i=0; i < accounts.length; i++){
           _isExcludedFromWhale[accounts[i]] = _enabled;
        }  
    }

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

    }

    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":"_tfrDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrMarketingFee","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyFeesBackup","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":"accounts","type":"address[]"}],"name":"excludeFromFeeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"includeManyToWhiteList","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":"accounts","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhaleMany","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"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b0319908116735d6adf875f9bedaf5777de23f00745c3d8f75f4017909155600680548216737acd853f97aedd4d14750014ed2f533bd979d002908117909155600780548316909117905560088054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055610100604052600960c090815268536861726b6f72736560b81b60e052601090620000a9908262000946565b50604080518082019091526009815268534841524b4f52534560b81b6020820152601190620000d9908262000946565b506012805460ff191681178155620000f390600a62000b25565b620001049064174876e80062000b36565b6013819055620001179060001962000b66565b620001259060001962000b7d565b6014556000601681905561012c6017819055601882905562000148908262000b93565b62000154919062000b93565b601955604051806060016040528060165481526020016017548152602001601854815250601a9060036200018a9291906200083a565b506000601b819055610190601c819055601d829055620001ab908262000b93565b620001b7919062000b93565b601e556000601f81905560208190556021819055620001d7818062000b93565b620001e3919062000b93565b6022556013546200020690600a90620001ff906103e86200051c565b906200056f565b6023556013546200022290601490620001ff906103e86200051c565b602455601254620002389060ff16600a62000b25565b6200024890631dcd650062000b36565b6025556026805461ff0019166101001790553480156200026757600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003de9833981519152908290a3503360009081526004602090815260408083208054600160ff19918216811790925530855282852080549091169091179055601454600780546001600160a01b03908116865260098552838620929092555460135492519283521692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36008546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa1580156200036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000391919062000ba9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000405919062000ba9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062000ba9565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff199182168117909255308452919092208054909116909117905554620004cf9116620005fd565b6007546001600160a01b03166000908152600d60205260409020805460ff19166001179055620004fe6200066c565b60075462000515906001600160a01b031662000702565b5062000c3b565b60006200056683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007fe60201b60201c565b90505b92915050565b600082600003620005835750600062000569565b600062000591838562000b36565b905082620005a0858362000bd4565b14620005665760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b03163314620006485760405162461bcd60e51b8152602060048201819052602482015260008051602062003dc98339815191526044820152606401620005f4565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d6000620006856000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b031633146200074d5760405162461bcd60e51b8152602060048201819052602482015260008051602062003dc98339815191526044820152606401620005f4565b6001600160a01b038116620007b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005f4565b600080546040516001600160a01b038085169392169160008051602062003de983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008183620008225760405162461bcd60e51b8152600401620005f4919062000beb565b50600062000831848662000bd4565b95945050505050565b82805482825590600052602060002090810192821562000878579160200282015b82811115620008785782518255916020019190600101906200085b565b50620008869291506200088a565b5090565b5b808211156200088657600081556001016200088b565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008cc57607f821691505b602082108103620008ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200094157600081815260208120601f850160051c810160208610156200091c5750805b601f850160051c820191505b818110156200093d5782815560010162000928565b5050505b505050565b81516001600160401b03811115620009625762000962620008a1565b6200097a81620009738454620008b7565b84620008f3565b602080601f831160018114620009b25760008415620009995750858301515b600019600386901b1c1916600185901b1785556200093d565b600085815260208120601f198616915b82811015620009e357888601518255948401946001909101908401620009c2565b508582101562000a025787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a6957816000190482111562000a4d5762000a4d62000a12565b8085161562000a5b57918102915b93841c939080029062000a2d565b509250929050565b60008262000a825750600162000569565b8162000a915750600062000569565b816001811462000aaa576002811462000ab55762000ad5565b600191505062000569565b60ff84111562000ac95762000ac962000a12565b50506001821b62000569565b5060208310610133831016604e8410600b841016171562000afa575081810a62000569565b62000b06838362000a28565b806000190482111562000b1d5762000b1d62000a12565b029392505050565b60006200056660ff84168362000a71565b808202811582820484141762000569576200056962000a12565b634e487b7160e01b600052601260045260246000fd5b60008262000b785762000b7862000b50565b500690565b8181038181111562000569576200056962000a12565b8082018082111562000569576200056962000a12565b60006020828403121562000bbc57600080fd5b81516001600160a01b03811681146200056657600080fd5b60008262000be65762000be662000b50565b500490565b600060208083528351808285015260005b8181101562000c1a5785810183015185820160400152820162000bfc565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05161312262000ca7600039600081816105bd01528181611a8a01528181611d3101528181611f8c01528181611fdc01526120190152600081816104540152818161225e015281816123170152818161235301528181612406015261246201526131226000f3fe6080604052600436106103845760003560e01c806388790a68116101d1578063c5d2418911610102578063dc44b6a0116100a0578063ec28438a1161006f578063ec28438a14610a08578063f2fde38b14610a28578063f887ea4014610a48578063fb201b1d14610a6857600080fd5b8063dc44b6a01461096c578063dd62ed3e14610982578063ea2f0b37146109c8578063ea377c2a146109e857600080fd5b8063d0d41fe1116100dc578063d0d41fe1146108ec578063d4ee1d901461090c578063d6a694f51461092c578063d6c0e80d1461094c57600080fd5b8063c5d24189146108aa578063c8607952146108c0578063c9cf7789146108d657600080fd5b8063a457c2d71161016f578063aee50b1e11610149578063aee50b1e14610834578063b863864c14610854578063bab184481461086a578063c49b9a801461088a57600080fd5b8063a457c2d7146107d4578063a5ece941146107f4578063a9059cbb1461081457600080fd5b8063906e9dd0116101ab578063906e9dd01461076a57806390a3dd9b1461078a57806395d89b41146107aa578063a073d37f146107bf57600080fd5b806388790a68146107165780638986092d1461072c5780638da5cb5b1461074c57600080fd5b806344d4225f116102b6578063620158521161025457806372b28e451161022357806372b28e45146106be5780637957bd59146106d45780637d1db4a5146106ea57806385ab2b9e1461070057600080fd5b8063620158521461065e5780636fee4f7a1461067457806370a0823114610689578063715018a6146106a957600080fd5b80634a74bb02116102905780634a74bb02146105df5780634b880e88146105fe5780634e3c06b11461061e5780635342acb41461063e57600080fd5b806344d4225f1461057157806347535d7b1461059157806349bd5a5e146105ab57600080fd5b806323b872dd116103235780633705b392116102fd5780633705b392146104fb57806339509351146105115780633ad10ef614610531578063437823ec1461055157600080fd5b806323b872dd146104a3578063313ce567146104c357806334c56c28146104e557600080fd5b806312eb7c791161035f57806312eb7c791461040b57806313114a9d1461042d5780631694505e1461044257806318160ddd1461048e57600080fd5b8062afb3251461039057806306fdde03146103b9578063095ea7b3146103db57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a6601e5481565b6040519081526020015b60405180910390f35b3480156103c557600080fd5b506103ce610a7d565b6040516103b09190612b2a565b3480156103e757600080fd5b506103fb6103f6366004612b98565b610b0f565b60405190151581526020016103b0565b34801561041757600080fd5b5061042b610426366004612bc4565b610b26565b005b34801561043957600080fd5b506015546103a6565b34801561044e57600080fd5b506104767f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103b0565b34801561049a57600080fd5b506013546103a6565b3480156104af57600080fd5b506103fb6104be366004612bf0565b610bc0565b3480156104cf57600080fd5b5060125460405160ff90911681526020016103b0565b3480156104f157600080fd5b506103a660215481565b34801561050757600080fd5b506103a660195481565b34801561051d57600080fd5b506103fb61052c366004612b98565b610c29565b34801561053d57600080fd5b50600654610476906001600160a01b031681565b34801561055d57600080fd5b5061042b61056c366004612c31565b610c5f565b34801561057d57600080fd5b5061042b61058c366004612c4e565b610cad565b34801561059d57600080fd5b506003546103fb9060ff1681565b3480156105b757600080fd5b506104767f000000000000000000000000000000000000000000000000000000000000000081565b3480156105eb57600080fd5b506026546103fb90610100900460ff1681565b34801561060a57600080fd5b5061042b610619366004612c31565b610d3c565b34801561062a57600080fd5b5061042b610639366004612c77565b610d8a565b34801561064a57600080fd5b506103fb610659366004612c31565b610ddf565b34801561066a57600080fd5b506103a660185481565b34801561068057600080fd5b5061042b610e2d565b34801561069557600080fd5b506103a66106a4366004612c31565b610ee2565b3480156106b557600080fd5b5061042b610f41565b3480156106ca57600080fd5b506103a660245481565b3480156106e057600080fd5b506103a6601f5481565b3480156106f657600080fd5b506103a660235481565b34801561070c57600080fd5b506103a660205481565b34801561072257600080fd5b506103a6601b5481565b34801561073857600080fd5b506103a6610747366004612c4e565b610fb5565b34801561075857600080fd5b506000546001600160a01b0316610476565b34801561077657600080fd5b5061042b610785366004612c31565b610fd6565b34801561079657600080fd5b5061042b6107a5366004612bc4565b611022565b3480156107b657600080fd5b506103ce6110d8565b3480156107cb57600080fd5b506025546103a6565b3480156107e057600080fd5b506103fb6107ef366004612b98565b6110e7565b34801561080057600080fd5b50600554610476906001600160a01b031681565b34801561082057600080fd5b506103fb61082f366004612b98565b611136565b34801561084057600080fd5b5061042b61084f366004612c4e565b611143565b34801561086057600080fd5b506103a660225481565b34801561087657600080fd5b5061042b610885366004612d64565b611172565b34801561089657600080fd5b5061042b6108a5366004612da1565b611208565b3480156108b657600080fd5b506103a660175481565b3480156108cc57600080fd5b506103a6601c5481565b3480156108e257600080fd5b506103a6601d5481565b3480156108f857600080fd5b5061042b610907366004612c31565b611286565b34801561091857600080fd5b50600754610476906001600160a01b031681565b34801561093857600080fd5b5061042b610947366004612bc4565b6112d2565b34801561095857600080fd5b5061042b610967366004612d64565b61135f565b34801561097857600080fd5b506103a660165481565b34801561098e57600080fd5b506103a661099d366004612dbc565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109d457600080fd5b5061042b6109e3366004612c31565b6113f1565b3480156109f457600080fd5b5061042b610a03366004612df5565b61143c565b348015610a1457600080fd5b5061042b610a23366004612c4e565b6114d2565b348015610a3457600080fd5b5061042b610a43366004612c31565b611558565b348015610a5457600080fd5b50600854610476906001600160a01b031681565b348015610a7457600080fd5b5061042b611642565b606060108054610a8c90612e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab890612e3a565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b6000610b1c33848461167b565b5060015b92915050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610b5090612e74565b60405180910390fd5b601f8390556020829055602181905580610b738385612ebf565b610b7d9190612ebf565b6022556000610b9682610b90868661179f565b9061179f565b90506103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b50505050565b6000610bcd848484611805565b610c1f8433610c1a856040518060600160405280602881526020016130a0602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b39565b61167b565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b1c918590610c1a908661179f565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5090612e74565b6024819055601354610cf890600190610cf290612710611b73565b90611bb5565b60245411610d395760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b50565b50565b6000546001600160a01b03163314610d665760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e0a5760405162461bcd60e51b8152600401610b5090612e74565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610e575760405162461bcd60e51b8152600401610b5090612e74565b604051600090339047908381818185875af1925050503d8060008114610e99576040519150601f19603f3d011682016040523d82523d6000602084013e610e9e565b606091505b5050905080610d395760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b50565b6001600160a01b0381166000908152600e602052604081205460ff1615610f1f57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b2090611c37565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b5090612e74565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a8181548110610fc557600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146110005760405162461bcd60e51b8152600401610b5090612e74565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461104c5760405162461bcd60e51b8152600401610b5090612e74565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261108390601a906003612aca565b50600061109482610b90868661179f565b90506018546017546016546110a99190612ebf565b6110b39190612ebf565b6019556103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b606060118054610a8c90612e3a565b6000610b1c3384610c1a856040518060600160405280602581526020016130c860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b39565b6000610b1c338484611805565b6000546001600160a01b0316331461116d5760405162461bcd60e51b8152600401610b5090612e74565b602555565b6000546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b5090612e74565b60005b8151811015611204576001600c60008484815181106111c0576111c0612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111fc81612f0e565b91505061119f565b5050565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610b5090612e74565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061127b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b5090612e74565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610b5090612e74565b601b839055601c829055601d819055600061131b82610b90868661179f565b9050601d54601c54601b546113309190612ebf565b61133a9190612ebf565b601e556103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610b5090612e74565b60005b8151811015611204576001600460008484815181106113ad576113ad612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113e981612f0e565b91505061138c565b6000546001600160a01b0316331461141b5760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146114665760405162461bcd60e51b8152600401610b5090612e74565b60005b82518110156114cd5781600d600085848151811061148957611489612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114c581612f0e565b915050611469565b505050565b6000546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610b5090612e74565b602381905560135461151790600190610cf290612710611b73565b6023541015610d395760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b50565b6000546001600160a01b031633146115825760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b5090612e74565b6003805460ff19166001179055565b6001600160a01b0383166116dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b50565b6001600160a01b03821661173e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b50565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117ac8385612ebf565b9050838110156117fe5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b50565b9392505050565b6003548390839060ff168061183257506001600160a01b03821660009081526004602052604090205460ff165b8061185557506001600160a01b03811660009081526004602052604090205460ff165b61188c5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b50565b6001600160a01b0385166118f05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b50565b6001600160a01b0384166119525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b50565b600083116119b45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b50565b6000546001600160a01b038681169116148015906119e057506000546001600160a01b03858116911614155b15611a4857602354831115611a485760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b50565b6000611a5330610ee2565b602554909150811015611a67878787611cb4565b60265460ff16158015611a815750602654610100900460ff165b8015611abf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b15611ad8578015611ad8576025549150611ad882611db0565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b1a57506001600160a01b0387166000908152600c602052604090205460ff165b15611b23575060005b611b2f88888884611f6c565b5050505050505050565b60008184841115611b5d5760405162461bcd60e51b8152600401610b509190612b2a565b506000611b6a8486612f27565b95945050505050565b60006117fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612174565b600082600003611bc757506000610b20565b6000611bd38385612f3a565b905082611be08583612f51565b146117fe5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b50565b6000601454821115611c9e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b50565b6000611ca86121a2565b90506117fe8382611b73565b6000611cc382610b9085610ee2565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611d0857506001600160a01b0383166000908152600d602052604090205460ff16155b15611d2f57602454811115611d2f5760405162461bcd60e51b8152600401610b5090612f73565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611d8957506001600160a01b0383166000908152600d602052604090205460ff16155b15610bba57602454811115610bba5760405162461bcd60e51b8152600401610b5090612f73565b6026805460ff19166001179055601854601754601654600092611dd8929091610b909161179f565b90506000611df9601d54610b90601c54601b5461179f90919063ffffffff16565b90506000611e07838361179f565b90506000611e346002611e2e84611e2e601b54601654611e279190612ebf565b8a90611bb5565b90611b73565b90506000611e4286836121c5565b9050611e4d81612207565b60004790506000611e776002611e2e87611e2e601b54601654611e709190612ebf565b8790611bb5565b9050600084118015611e895750600081115b15611e9857611e988482612400565b6000611eb886611e2e601c54601754611eb19190612ebf565b8690611bb5565b90508015611efc576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611efa573d6000803e3d6000fd5b505b6000611f1282611f0c86866121c5565b906121c5565b90508015611f56576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f54573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b80611f8a57611f85600060168190556017819055601855565b61206a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611fda57611fda601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561204e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561206a5761206a601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120ab57506001600160a01b0383166000908152600e602052604090205460ff16155b156120c0576120bb8484846124e0565b61216c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561210157506001600160a01b0383166000908152600e602052604090205460ff165b15612111576120bb848484612639565b6001600160a01b0384166000908152600e602052604090205460ff16801561215157506001600160a01b0383166000908152600e602052604090205460ff165b15612161576120bb8484846126da565b61216c848484612745565b610bba612781565b600081836121955760405162461bcd60e51b8152600401610b509190612b2a565b506000611b6a8486612f51565b60008060006121af6127f0565b90925090506121be8282611b73565b9250505090565b60006117fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b39565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061223c5761223c612ef8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190612fbb565b816001815181106122f1576122f1612ef8565b60200260200101906001600160a01b031690816001600160a01b03168152505061233c307f00000000000000000000000000000000000000000000000000000000000000008461167b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061239190859060009086903090429060040161301c565b600060405180830381600087803b1580156123ab57600080fd5b505af11580156123bf573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516123f4929190613058565b60405180910390a15050565b61242b307f00000000000000000000000000000000000000000000000000000000000000008461167b565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124d99190613071565b5050505050565b6000806000806124ef85612972565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061251c90866121c5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461254b90856121c5565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461257a908461179f565b6001600160a01b03871660009081526009602052604090205561259c816129b0565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125e191815260200190565b60405180910390a380156126305760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061264885612972565b6001600160a01b038b166000908152600960205260409020549397509195509350915061267590856121c5565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126ab908361179f565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461257a908461179f565b6000806000806126e985612972565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061271690866121c5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461267590856121c5565b60008060008061275485612972565b6001600160a01b038b166000908152600960205260409020549397509195509350915061254b90856121c5565b601a60008154811061279557612795612ef8565b9060005260206000200154601681905550601a6001815481106127ba576127ba612ef8565b9060005260206000200154601781905550601a6002815481106127df576127df612ef8565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612942578260096000600f848154811061281f5761281f612ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061288a575081600a6000600f848154811061286357612863612ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128a057601454601354945094505050509091565b6128e660096000600f84815481106128ba576128ba612ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121c5565b925061292e600a6000600f848154811061290257612902612ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121c5565b91508061293a81612f0e565b9150506127fd565b5060135460145461295291611b73565b821015612969576014546013549350935050509091565b90939092509050565b60008060008060008061298487612a38565b9150915060008061299d89846129986121a2565b612a5f565b909a909950939750919550919350505050565b60006129ba6121a2565b905060006129c88383611bb5565b306000908152600960205260409020549091506129e5908261179f565b30600090815260096020908152604080832093909355600e9052205460ff16156114cd57306000908152600a6020526040902054612a23908461179f565b306000908152600a6020526040902055505050565b6000806000612a4684612a98565b90506000612a5485836121c5565b959194509092505050565b60008080612a6d8685611bb5565b90506000612a7b8686611bb5565b90506000612a8983836121c5565b92989297509195505050505050565b600080612ab8601854610b9060175460165461179f90919063ffffffff16565b90506117fe6103e8611e2e8584611bb5565b828054828255906000526020600020908101928215612b05579160200282015b82811115612b05578251825591602001919060010190612aea565b50612b11929150612b15565b5090565b5b80821115612b115760008155600101612b16565b600060208083528351808285015260005b81811015612b5757858101830151858201604001528201612b3b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3957600080fd5b8035610e2881612b78565b60008060408385031215612bab57600080fd5b8235612bb681612b78565b946020939093013593505050565b600080600060608486031215612bd957600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c0557600080fd5b8335612c1081612b78565b92506020840135612c2081612b78565b929592945050506040919091013590565b600060208284031215612c4357600080fd5b81356117fe81612b78565b600060208284031215612c6057600080fd5b5035919050565b80358015158114610e2857600080fd5b60008060408385031215612c8a57600080fd5b8235612c9581612b78565b9150612ca360208401612c67565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612cd357600080fd5b8135602067ffffffffffffffff80831115612cf057612cf0612cac565b8260051b604051601f19603f83011681018181108482111715612d1557612d15612cac565b604052938452858101830193838101925087851115612d3357600080fd5b83870191505b84821015612d5957612d4a82612b8d565b83529183019190830190612d39565b979650505050505050565b600060208284031215612d7657600080fd5b813567ffffffffffffffff811115612d8d57600080fd5b612d9984828501612cc2565b949350505050565b600060208284031215612db357600080fd5b6117fe82612c67565b60008060408385031215612dcf57600080fd5b8235612dda81612b78565b91506020830135612dea81612b78565b809150509250929050565b60008060408385031215612e0857600080fd5b823567ffffffffffffffff811115612e1f57600080fd5b612e2b85828601612cc2565b925050612ca360208401612c67565b600181811c90821680612e4e57607f821691505b602082108103612e6e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2057610b20612ea9565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f2057612f20612ea9565b5060010190565b81810381811115610b2057610b20612ea9565b8082028115828204841417610b2057610b20612ea9565b600082612f6e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060208284031215612fcd57600080fd5b81516117fe81612b78565b600081518084526020808501945080840160005b838110156130115781516001600160a01b031687529582019590820190600101612fec565b509495945050505050565b85815284602082015260a06040820152600061303b60a0830186612fd8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612d996040830184612fd8565b60008060006060848603121561308657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fc91bf166b715fb105393c39452772e15f8996c75124ac511b91a222357f3e564736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103845760003560e01c806388790a68116101d1578063c5d2418911610102578063dc44b6a0116100a0578063ec28438a1161006f578063ec28438a14610a08578063f2fde38b14610a28578063f887ea4014610a48578063fb201b1d14610a6857600080fd5b8063dc44b6a01461096c578063dd62ed3e14610982578063ea2f0b37146109c8578063ea377c2a146109e857600080fd5b8063d0d41fe1116100dc578063d0d41fe1146108ec578063d4ee1d901461090c578063d6a694f51461092c578063d6c0e80d1461094c57600080fd5b8063c5d24189146108aa578063c8607952146108c0578063c9cf7789146108d657600080fd5b8063a457c2d71161016f578063aee50b1e11610149578063aee50b1e14610834578063b863864c14610854578063bab184481461086a578063c49b9a801461088a57600080fd5b8063a457c2d7146107d4578063a5ece941146107f4578063a9059cbb1461081457600080fd5b8063906e9dd0116101ab578063906e9dd01461076a57806390a3dd9b1461078a57806395d89b41146107aa578063a073d37f146107bf57600080fd5b806388790a68146107165780638986092d1461072c5780638da5cb5b1461074c57600080fd5b806344d4225f116102b6578063620158521161025457806372b28e451161022357806372b28e45146106be5780637957bd59146106d45780637d1db4a5146106ea57806385ab2b9e1461070057600080fd5b8063620158521461065e5780636fee4f7a1461067457806370a0823114610689578063715018a6146106a957600080fd5b80634a74bb02116102905780634a74bb02146105df5780634b880e88146105fe5780634e3c06b11461061e5780635342acb41461063e57600080fd5b806344d4225f1461057157806347535d7b1461059157806349bd5a5e146105ab57600080fd5b806323b872dd116103235780633705b392116102fd5780633705b392146104fb57806339509351146105115780633ad10ef614610531578063437823ec1461055157600080fd5b806323b872dd146104a3578063313ce567146104c357806334c56c28146104e557600080fd5b806312eb7c791161035f57806312eb7c791461040b57806313114a9d1461042d5780631694505e1461044257806318160ddd1461048e57600080fd5b8062afb3251461039057806306fdde03146103b9578063095ea7b3146103db57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a6601e5481565b6040519081526020015b60405180910390f35b3480156103c557600080fd5b506103ce610a7d565b6040516103b09190612b2a565b3480156103e757600080fd5b506103fb6103f6366004612b98565b610b0f565b60405190151581526020016103b0565b34801561041757600080fd5b5061042b610426366004612bc4565b610b26565b005b34801561043957600080fd5b506015546103a6565b34801561044e57600080fd5b506104767f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103b0565b34801561049a57600080fd5b506013546103a6565b3480156104af57600080fd5b506103fb6104be366004612bf0565b610bc0565b3480156104cf57600080fd5b5060125460405160ff90911681526020016103b0565b3480156104f157600080fd5b506103a660215481565b34801561050757600080fd5b506103a660195481565b34801561051d57600080fd5b506103fb61052c366004612b98565b610c29565b34801561053d57600080fd5b50600654610476906001600160a01b031681565b34801561055d57600080fd5b5061042b61056c366004612c31565b610c5f565b34801561057d57600080fd5b5061042b61058c366004612c4e565b610cad565b34801561059d57600080fd5b506003546103fb9060ff1681565b3480156105b757600080fd5b506104767f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de81565b3480156105eb57600080fd5b506026546103fb90610100900460ff1681565b34801561060a57600080fd5b5061042b610619366004612c31565b610d3c565b34801561062a57600080fd5b5061042b610639366004612c77565b610d8a565b34801561064a57600080fd5b506103fb610659366004612c31565b610ddf565b34801561066a57600080fd5b506103a660185481565b34801561068057600080fd5b5061042b610e2d565b34801561069557600080fd5b506103a66106a4366004612c31565b610ee2565b3480156106b557600080fd5b5061042b610f41565b3480156106ca57600080fd5b506103a660245481565b3480156106e057600080fd5b506103a6601f5481565b3480156106f657600080fd5b506103a660235481565b34801561070c57600080fd5b506103a660205481565b34801561072257600080fd5b506103a6601b5481565b34801561073857600080fd5b506103a6610747366004612c4e565b610fb5565b34801561075857600080fd5b506000546001600160a01b0316610476565b34801561077657600080fd5b5061042b610785366004612c31565b610fd6565b34801561079657600080fd5b5061042b6107a5366004612bc4565b611022565b3480156107b657600080fd5b506103ce6110d8565b3480156107cb57600080fd5b506025546103a6565b3480156107e057600080fd5b506103fb6107ef366004612b98565b6110e7565b34801561080057600080fd5b50600554610476906001600160a01b031681565b34801561082057600080fd5b506103fb61082f366004612b98565b611136565b34801561084057600080fd5b5061042b61084f366004612c4e565b611143565b34801561086057600080fd5b506103a660225481565b34801561087657600080fd5b5061042b610885366004612d64565b611172565b34801561089657600080fd5b5061042b6108a5366004612da1565b611208565b3480156108b657600080fd5b506103a660175481565b3480156108cc57600080fd5b506103a6601c5481565b3480156108e257600080fd5b506103a6601d5481565b3480156108f857600080fd5b5061042b610907366004612c31565b611286565b34801561091857600080fd5b50600754610476906001600160a01b031681565b34801561093857600080fd5b5061042b610947366004612bc4565b6112d2565b34801561095857600080fd5b5061042b610967366004612d64565b61135f565b34801561097857600080fd5b506103a660165481565b34801561098e57600080fd5b506103a661099d366004612dbc565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109d457600080fd5b5061042b6109e3366004612c31565b6113f1565b3480156109f457600080fd5b5061042b610a03366004612df5565b61143c565b348015610a1457600080fd5b5061042b610a23366004612c4e565b6114d2565b348015610a3457600080fd5b5061042b610a43366004612c31565b611558565b348015610a5457600080fd5b50600854610476906001600160a01b031681565b348015610a7457600080fd5b5061042b611642565b606060108054610a8c90612e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab890612e3a565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b6000610b1c33848461167b565b5060015b92915050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610b5090612e74565b60405180910390fd5b601f8390556020829055602181905580610b738385612ebf565b610b7d9190612ebf565b6022556000610b9682610b90868661179f565b9061179f565b90506103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b50505050565b6000610bcd848484611805565b610c1f8433610c1a856040518060600160405280602881526020016130a0602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b39565b61167b565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b1c918590610c1a908661179f565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5090612e74565b6024819055601354610cf890600190610cf290612710611b73565b90611bb5565b60245411610d395760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b50565b50565b6000546001600160a01b03163314610d665760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610db45760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e0a5760405162461bcd60e51b8152600401610b5090612e74565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610e575760405162461bcd60e51b8152600401610b5090612e74565b604051600090339047908381818185875af1925050503d8060008114610e99576040519150601f19603f3d011682016040523d82523d6000602084013e610e9e565b606091505b5050905080610d395760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b50565b6001600160a01b0381166000908152600e602052604081205460ff1615610f1f57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b2090611c37565b6000546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b5090612e74565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a8181548110610fc557600080fd5b600091825260209091200154905081565b6000546001600160a01b031633146110005760405162461bcd60e51b8152600401610b5090612e74565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461104c5760405162461bcd60e51b8152600401610b5090612e74565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261108390601a906003612aca565b50600061109482610b90868661179f565b90506018546017546016546110a99190612ebf565b6110b39190612ebf565b6019556103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b606060118054610a8c90612e3a565b6000610b1c3384610c1a856040518060600160405280602581526020016130c860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b39565b6000610b1c338484611805565b6000546001600160a01b0316331461116d5760405162461bcd60e51b8152600401610b5090612e74565b602555565b6000546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b5090612e74565b60005b8151811015611204576001600c60008484815181106111c0576111c0612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111fc81612f0e565b91505061119f565b5050565b6000546001600160a01b031633146112325760405162461bcd60e51b8152600401610b5090612e74565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061127b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b5090612e74565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610b5090612e74565b601b839055601c829055601d819055600061131b82610b90868661179f565b9050601d54601c54601b546113309190612ebf565b61133a9190612ebf565b601e556103e8811115610bba5760405162461bcd60e51b8152600401610b5090612ed2565b6000546001600160a01b031633146113895760405162461bcd60e51b8152600401610b5090612e74565b60005b8151811015611204576001600460008484815181106113ad576113ad612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113e981612f0e565b91505061138c565b6000546001600160a01b0316331461141b5760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146114665760405162461bcd60e51b8152600401610b5090612e74565b60005b82518110156114cd5781600d600085848151811061148957611489612ef8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114c581612f0e565b915050611469565b505050565b6000546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610b5090612e74565b602381905560135461151790600190610cf290612710611b73565b6023541015610d395760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b50565b6000546001600160a01b031633146115825760405162461bcd60e51b8152600401610b5090612e74565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b5090612e74565b6003805460ff19166001179055565b6001600160a01b0383166116dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b50565b6001600160a01b03821661173e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b50565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117ac8385612ebf565b9050838110156117fe5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b50565b9392505050565b6003548390839060ff168061183257506001600160a01b03821660009081526004602052604090205460ff165b8061185557506001600160a01b03811660009081526004602052604090205460ff165b61188c5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b50565b6001600160a01b0385166118f05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b50565b6001600160a01b0384166119525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b50565b600083116119b45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b50565b6000546001600160a01b038681169116148015906119e057506000546001600160a01b03858116911614155b15611a4857602354831115611a485760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b50565b6000611a5330610ee2565b602554909150811015611a67878787611cb4565b60265460ff16158015611a815750602654610100900460ff165b8015611abf57507f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de6001600160a01b0316876001600160a01b031614155b15611ad8578015611ad8576025549150611ad882611db0565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b1a57506001600160a01b0387166000908152600c602052604090205460ff165b15611b23575060005b611b2f88888884611f6c565b5050505050505050565b60008184841115611b5d5760405162461bcd60e51b8152600401610b509190612b2a565b506000611b6a8486612f27565b95945050505050565b60006117fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612174565b600082600003611bc757506000610b20565b6000611bd38385612f3a565b905082611be08583612f51565b146117fe5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b50565b6000601454821115611c9e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b50565b6000611ca86121a2565b90506117fe8382611b73565b6000611cc382610b9085610ee2565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611d0857506001600160a01b0383166000908152600d602052604090205460ff16155b15611d2f57602454811115611d2f5760405162461bcd60e51b8152600401610b5090612f73565b7f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de6001600160a01b0316846001600160a01b0316148015611d8957506001600160a01b0383166000908152600d602052604090205460ff16155b15610bba57602454811115610bba5760405162461bcd60e51b8152600401610b5090612f73565b6026805460ff19166001179055601854601754601654600092611dd8929091610b909161179f565b90506000611df9601d54610b90601c54601b5461179f90919063ffffffff16565b90506000611e07838361179f565b90506000611e346002611e2e84611e2e601b54601654611e279190612ebf565b8a90611bb5565b90611b73565b90506000611e4286836121c5565b9050611e4d81612207565b60004790506000611e776002611e2e87611e2e601b54601654611e709190612ebf565b8790611bb5565b9050600084118015611e895750600081115b15611e9857611e988482612400565b6000611eb886611e2e601c54601754611eb19190612ebf565b8690611bb5565b90508015611efc576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611efa573d6000803e3d6000fd5b505b6000611f1282611f0c86866121c5565b906121c5565b90508015611f56576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f54573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b80611f8a57611f85600060168190556017819055601855565b61206a565b7f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de6001600160a01b0316836001600160a01b031603611fda57611fda601b54601655601c54601755601d54601855565b7f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de6001600160a01b0316846001600160a01b03161415801561204e57507f0000000000000000000000002bff5bbee646672cae15425002e6a4a22ccaa3de6001600160a01b0316836001600160a01b031614155b1561206a5761206a601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120ab57506001600160a01b0383166000908152600e602052604090205460ff16155b156120c0576120bb8484846124e0565b61216c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561210157506001600160a01b0383166000908152600e602052604090205460ff165b15612111576120bb848484612639565b6001600160a01b0384166000908152600e602052604090205460ff16801561215157506001600160a01b0383166000908152600e602052604090205460ff165b15612161576120bb8484846126da565b61216c848484612745565b610bba612781565b600081836121955760405162461bcd60e51b8152600401610b509190612b2a565b506000611b6a8486612f51565b60008060006121af6127f0565b90925090506121be8282611b73565b9250505090565b60006117fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b39565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061223c5761223c612ef8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190612fbb565b816001815181106122f1576122f1612ef8565b60200260200101906001600160a01b031690816001600160a01b03168152505061233c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061239190859060009086903090429060040161301c565b600060405180830381600087803b1580156123ab57600080fd5b505af11580156123bf573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516123f4929190613058565b60405180910390a15050565b61242b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167b565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124d99190613071565b5050505050565b6000806000806124ef85612972565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061251c90866121c5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461254b90856121c5565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461257a908461179f565b6001600160a01b03871660009081526009602052604090205561259c816129b0565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125e191815260200190565b60405180910390a380156126305760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061264885612972565b6001600160a01b038b166000908152600960205260409020549397509195509350915061267590856121c5565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126ab908361179f565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461257a908461179f565b6000806000806126e985612972565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061271690866121c5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461267590856121c5565b60008060008061275485612972565b6001600160a01b038b166000908152600960205260409020549397509195509350915061254b90856121c5565b601a60008154811061279557612795612ef8565b9060005260206000200154601681905550601a6001815481106127ba576127ba612ef8565b9060005260206000200154601781905550601a6002815481106127df576127df612ef8565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612942578260096000600f848154811061281f5761281f612ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061288a575081600a6000600f848154811061286357612863612ef8565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128a057601454601354945094505050509091565b6128e660096000600f84815481106128ba576128ba612ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121c5565b925061292e600a6000600f848154811061290257612902612ef8565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121c5565b91508061293a81612f0e565b9150506127fd565b5060135460145461295291611b73565b821015612969576014546013549350935050509091565b90939092509050565b60008060008060008061298487612a38565b9150915060008061299d89846129986121a2565b612a5f565b909a909950939750919550919350505050565b60006129ba6121a2565b905060006129c88383611bb5565b306000908152600960205260409020549091506129e5908261179f565b30600090815260096020908152604080832093909355600e9052205460ff16156114cd57306000908152600a6020526040902054612a23908461179f565b306000908152600a6020526040902055505050565b6000806000612a4684612a98565b90506000612a5485836121c5565b959194509092505050565b60008080612a6d8685611bb5565b90506000612a7b8686611bb5565b90506000612a8983836121c5565b92989297509195505050505050565b600080612ab8601854610b9060175460165461179f90919063ffffffff16565b90506117fe6103e8611e2e8584611bb5565b828054828255906000526020600020908101928215612b05579160200282015b82811115612b05578251825591602001919060010190612aea565b50612b11929150612b15565b5090565b5b80821115612b115760008155600101612b16565b600060208083528351808285015260005b81811015612b5757858101830151858201604001528201612b3b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3957600080fd5b8035610e2881612b78565b60008060408385031215612bab57600080fd5b8235612bb681612b78565b946020939093013593505050565b600080600060608486031215612bd957600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c0557600080fd5b8335612c1081612b78565b92506020840135612c2081612b78565b929592945050506040919091013590565b600060208284031215612c4357600080fd5b81356117fe81612b78565b600060208284031215612c6057600080fd5b5035919050565b80358015158114610e2857600080fd5b60008060408385031215612c8a57600080fd5b8235612c9581612b78565b9150612ca360208401612c67565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612cd357600080fd5b8135602067ffffffffffffffff80831115612cf057612cf0612cac565b8260051b604051601f19603f83011681018181108482111715612d1557612d15612cac565b604052938452858101830193838101925087851115612d3357600080fd5b83870191505b84821015612d5957612d4a82612b8d565b83529183019190830190612d39565b979650505050505050565b600060208284031215612d7657600080fd5b813567ffffffffffffffff811115612d8d57600080fd5b612d9984828501612cc2565b949350505050565b600060208284031215612db357600080fd5b6117fe82612c67565b60008060408385031215612dcf57600080fd5b8235612dda81612b78565b91506020830135612dea81612b78565b809150509250929050565b60008060408385031215612e0857600080fd5b823567ffffffffffffffff811115612e1f57600080fd5b612e2b85828601612cc2565b925050612ca360208401612c67565b600181811c90821680612e4e57607f821691505b602082108103612e6e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2057610b20612ea9565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f2057612f20612ea9565b5060010190565b81810381811115610b2057610b20612ea9565b8082028115828204841417610b2057610b20612ea9565b600082612f6e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060208284031215612fcd57600080fd5b81516117fe81612b78565b600081518084526020808501945080840160005b838110156130115781516001600160a01b031687529582019590820190600101612fec565b509495945050505050565b85815284602082015260a06040820152600061303b60a0830186612fd8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612d996040830184612fd8565b60008060006060848603121561308657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fc91bf166b715fb105393c39452772e15f8996c75124ac511b91a222357f3e564736f6c63430008130033

Deployed Bytecode Sourcemap

6072:20733:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7640:77;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;7640:77:0;;;;;;;;9448:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10360:161::-;;;;;;;;;;-1:-1:-1;10360:161:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;10360:161:0;1344:187:1;23808:454:0;;;;;;;;;;-1:-1:-1;23808:454:0;;;;;:::i;:::-;;:::i;:::-;;11355:87;;;;;;;;;;-1:-1:-1;11424:10:0;;11355:87;;8202:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;8202:51:0;1857:229:1;9725:95:0;;;;;;;;;;-1:-1:-1;9805:7:0;;9725:95;;10529:313;;;;;;;;;;-1:-1:-1;10529:313:0;;;;;:::i;:::-;;:::i;9634:83::-;;;;;;;;;;-1:-1:-1;9700:9:0;;9634:83;;9700:9;;;;2694:36:1;;2682:2;2667:18;9634:83:0;2552:184:1;7810:30:0;;;;;;;;;;;;;;;;7344:73;;;;;;;;;;;;;;;;10850:218;;;;;;;;;;-1:-1:-1;10850:218:0;;;;;:::i;:::-;;:::i;6263:87::-;;;;;;;;;;-1:-1:-1;6263:87:0;;;;-1:-1:-1;;;;;6263:87:0;;;21671:111;;;;;;;;;;-1:-1:-1;21671:111:0;;;;;:::i;:::-;;:::i;26358:215::-;;;;;;;;;;-1:-1:-1;26358:215:0;;;;;:::i;:::-;;:::i;5329:26::-;;;;;;;;;;-1:-1:-1;5329:26:0;;;;;;;;8260:38;;;;;;;;;;;;;;;8339:40;;;;;;;;;;-1:-1:-1;8339:40:0;;;;;;;;;;;5754:109;;;;;;;;;;-1:-1:-1;5754:109:0;;;;;:::i;:::-;;:::i;25972:143::-;;;;;;;;;;-1:-1:-1;25972:143:0;;;;;:::i;:::-;;:::i;21529:134::-;;;;;;;;;;-1:-1:-1;21529:134:0;;;;;:::i;:::-;;:::i;7306:29::-;;;;;;;;;;;;;;;;26581:182;;;;;;;;;;;;;:::i;9828:198::-;;;;;;;;;;-1:-1:-1;9828:198:0;;;;;:::i;:::-;;:::i;3445:148::-;;;;;;;;;;;;;:::i;8017:66::-;;;;;;;;;;;;;;;;7726:35;;;;;;;;;;;;;;;;7934:55;;;;;;;;;;;;;;;;7768:35;;;;;;;;;;;;;;;;7514:36;;;;;;;;;;;;;;;;7424:81;;;;;;;;;;-1:-1:-1;7424:81:0;;;;;:::i;:::-;;:::i;3231:79::-;;;;;;;;;;-1:-1:-1;3269:7:0;3296:6;-1:-1:-1;;;;;3296:6:0;3231:79;;24647:146;;;;;;;;;;-1:-1:-1;24647:146:0;;;;;:::i;:::-;;:::i;22819:519::-;;;;;;;;;;-1:-1:-1;22819:519:0;;;;;:::i;:::-;;:::i;9539:87::-;;;;;;;;;;;;;:::i;11450:120::-;;;;;;;;;;-1:-1:-1;11539:23:0;;11450:120;;11076:269;;;;;;;;;;-1:-1:-1;11076:269:0;;;;;:::i;:::-;;:::i;6163:93::-;;;;;;;;;;-1:-1:-1;6163:93:0;;;;-1:-1:-1;;;;;6163:93:0;;;10034:167;;;;;;;;;;-1:-1:-1;10034:167:0;;;;;:::i;:::-;;:::i;24474:165::-;;;;;;;;;;-1:-1:-1;24474:165:0;;;;;:::i;:::-;;:::i;7847:78::-;;;;;;;;;;;;;;;;21790:194;;;;;;;;;;-1:-1:-1;21790:194:0;;;;;:::i;:::-;;:::i;24931:176::-;;;;;;;;;;-1:-1:-1;24931:176:0;;;;;:::i;:::-;;:::i;7262:37::-;;;;;;;;;;;;;;;;7557:38;;;;;;;;;;;;;;;;7602:31;;;;;;;;;;;;;;;;24801:122;;;;;;;;;;-1:-1:-1;24801:122:0;;;;;:::i;:::-;;:::i;6357:68::-;;;;;;;;;;-1:-1:-1;6357:68:0;;;;-1:-1:-1;;;;;6357:68:0;;;23346:452;;;;;;;;;;-1:-1:-1;23346:452:0;;;;;:::i;:::-;;:::i;5871:194::-;;;;;;;;;;-1:-1:-1;5871:194:0;;;;;:::i;:::-;;:::i;7220:35::-;;;;;;;;;;;;;;;;10209:143;;;;;;;;;;-1:-1:-1;10209:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;10317:18:0;;;10290:7;10317:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10209:143;21992:110;;;;;;;;;;-1:-1:-1;21992:110:0;;;;;:::i;:::-;;:::i;26123:227::-;;;;;;;;;;-1:-1:-1;26123:227:0;;;;;:::i;:::-;;:::i;24272:194::-;;;;;;;;;;-1:-1:-1;24272:194:0;;;;;:::i;:::-;;:::i;3601:244::-;;;;;;;;;;-1:-1:-1;3601:244:0;;;;;:::i;:::-;;:::i;6432:66::-;;;;;;;;;;-1:-1:-1;6432:66:0;;;;-1:-1:-1;;;;;6432:66:0;;;5669:77;;;;;;;;;;;;;:::i;9448:83::-;9485:13;9518:5;9511:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9448:83;:::o;10360:161::-;10435:4;10452:39;337:10;10475:7;10484:6;10452:8;:39::i;:::-;-1:-1:-1;10509:4:0;10360:161;;;;;:::o;23808:454::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;;;;;;;;;23949:16:::1;:32:::0;;;23992:16:::1;:32:::0;;;24035:10:::1;:20:::0;;;24048:7;24085:33:::1;24011:13:::0;23968;24085:33:::1;:::i;:::-;:44;;;;:::i;:::-;24066:16;:63:::0;24140:16:::1;24159:45;24196:7:::0;24159:32:::1;:13:::0;24177;24159:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;24140:64;;24233:4;24223:8;:14;;24215:39;;;;-1:-1:-1::0;;;24215:39:0::1;;;;;;;:::i;:::-;23938:324;23808:454:::0;;;:::o;10529:313::-;10627:4;10644:36;10654:6;10662:9;10673:6;10644:9;:36::i;:::-;10691:121;10700:6;337:10;10722:89;10760:6;10722:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10722:19:0;;;;;;:11;:19;;;;;;;;337:10;10722:33;;;;;;;;;;:37;:89::i;:::-;10691:8;:121::i;:::-;-1:-1:-1;10830:4:0;10529:313;;;;;:::o;10850:218::-;337:10;10938:4;10987:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10987:34:0;;;;;;;;;;10938:4;;10955:83;;10978:7;;10987:50;;11026:10;10987:38;:50::i;21671:111::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21740:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;21740:34:0::1;21770:4;21740:34;::::0;;21671:111::o;26358:215::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;26443:22:::1;:32:::0;;;26519:7:::1;::::0;:25:::1;::::0;26542:1:::1;::::0;26519:18:::1;::::0;26531:5:::1;26519:11;:18::i;:::-;:22:::0;::::1;:25::i;:::-;26494:22;;:50;26486:77;;;::::0;-1:-1:-1;;;26486:77:0;;8043:2:1;26486:77:0::1;::::0;::::1;8025:21:1::0;8082:2;8062:18;;;8055:30;-1:-1:-1;;;8101:18:1;;;8094:44;8155:18;;26486:77:0::1;7841:338:1::0;26486:77:0::1;26358:215:::0;:::o;5754:109::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5828:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;5828:27:0::1;5851:4;5828:27;::::0;;5754:109::o;25972:143::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26067:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;26067:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25972:143::o;21529:134::-;21603:4;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21628:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;3428:1;21529:134:::0;;;:::o;26581:182::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;26659:49:::1;::::0;26641:12:::1;::::0;26659:10:::1;::::0;26682:21:::1;::::0;26641:12;26659:49;26641:12;26659:49;26682:21;26659:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26640:68;;;26727:7;26719:36;;;::::0;-1:-1:-1;;;26719:36:0;;8596:2:1;26719:36:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;-1:-1:-1;;;8654:18:1;;;8647:46;8710:18;;26719:36:0::1;8394:340:1::0;9828:198:0;-1:-1:-1;;;;;9918:20:0;;9894:7;9918:20;;;:11;:20;;;;;;;;9914:49;;;-1:-1:-1;;;;;;9947:16:0;;;;;:7;:16;;;;;;;9828:198::o;9914:49::-;-1:-1:-1;;;;;10001:16:0;;;;;;:7;:16;;;;;;9981:37;;:19;:37::i;3445:148::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;3552:1:::1;3536:6:::0;;3515:40:::1;::::0;-1:-1:-1;;;;;3536:6:0;;::::1;::::0;3515:40:::1;::::0;3552:1;;3515:40:::1;3583:1;3566:19:::0;;-1:-1:-1;;;;;;3566:19:0::1;::::0;;3445:148::o;7424:81::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7424:81:0;:::o;24647:146::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;24740:16:::1;:45:::0;;-1:-1:-1;;;;;;24740:45:0::1;-1:-1:-1::0;;;;;24740:45:0;;;::::1;::::0;;;::::1;::::0;;24647:146::o;22819:519::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;22955:16:::1;:32:::0;;;22998:16:::1;:32:::0;;;23041:10:::1;:20:::0;;;23072:64:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:64:::1;;:::i;:::-;-1:-1:-1::0;23147:16:0::1;23166:45;23203:7:::0;23166:32:::1;:13:::0;23184;23166:17:::1;:32::i;:45::-;23147:64;;23270:10;;23253:16;;23236;;:33;;;;:::i;:::-;:44;;;;:::i;:::-;23222:11;:58:::0;23309:4:::1;23299:14:::0;::::1;;23291:39;;;;-1:-1:-1::0;;;23291:39:0::1;;;;;;;:::i;9539:87::-:0;9578:13;9611:7;9604:14;;;;;:::i;11076:269::-;11169:4;11186:129;337:10;11209:7;11218:96;11257:15;11218:96;;;;;;;;;;;;;;;;;337:10;11218:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11218:34:0;;;;;;;;;;;;:38;:96::i;10034:167::-;10112:4;10129:42;337:10;10153:9;10164:6;10129:9;:42::i;24474:165::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;24581:23:::1;:50:::0;24474:165::o;21790:194::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;21877:6:::1;21873:104;21891:8;:15;21887:1;:19;21873:104;;;21961:4;21927:18;:31;21946:8;21955:1;21946:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21927:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21927:31:0;:38;;-1:-1:-1;;21927:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21908:3;::::1;::::0;::::1;:::i;:::-;;;;21873:104;;;;21790:194:::0;:::o;24931:176::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;25013:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;25013:32:0;;::::1;;::::0;;25061:38:::1;::::0;::::1;::::0;::::1;::::0;25037:8;1509:14:1;1502:22;1484:41;;1472:2;1457:18;;1344:187;25061:38:0::1;;;;;;;;24931:176:::0;:::o;24801:122::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;24882:10:::1;:33:::0;;-1:-1:-1;;;;;;24882:33:0::1;-1:-1:-1::0;;;;;24882:33:0;;;::::1;::::0;;;::::1;::::0;;24801:122::o;23346:452::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;23483:17:::1;:33:::0;;;23527:17:::1;:33:::0;;;23571:11:::1;:21:::0;;;-1:-1:-1;23622:45:0::1;23585:7:::0;23622:32:::1;23503:13:::0;23547;23622:17:::1;:32::i;:45::-;23603:64;;23729:11;;23711:17;;23693;;:35;;;;:::i;:::-;:47;;;;:::i;:::-;23678:12;:62:::0;23769:4:::1;23759:14:::0;::::1;;23751:39;;;;-1:-1:-1::0;;;23751:39:0::1;;;;;;;:::i;5871:194::-:0;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;5964:6:::1;5960:98;5976:10;:17;5974:1;:19;5960:98;;;6042:4;6014:10;:25;6025:10;6036:1;6025:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6014:25:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;6014:25:0;:32;;-1:-1:-1;;6014:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;5995:3;::::1;::::0;::::1;:::i;:::-;;;;5960:98;;21992:110:::0;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22059:27:0::1;22089:5;22059:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22059:35:0::1;::::0;;21992:110::o;26123:227::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;26236:6:::1;26232:109;26250:8;:15;26246:1;:19;26232:109;;;26321:8;26285:20;:33;26306:8;26315:1;26306:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26285:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26285:33:0;:44;;-1:-1:-1;;26285:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26267:3;::::1;::::0;::::1;:::i;:::-;;;;26232:109;;;;26123:227:::0;;:::o;24272:194::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;24354:12:::1;:26:::0;;;24415:7:::1;::::0;:25:::1;::::0;24438:1:::1;::::0;24415:18:::1;::::0;24427:5:::1;24415:11;:18::i;:25::-;24399:12;;:41;;24391:67;;;::::0;-1:-1:-1;;;24391:67:0;;9213:2:1;24391:67:0::1;::::0;::::1;9195:21:1::0;9252:2;9232:18;;;9225:30;-1:-1:-1;;;9271:18:1;;;9264:43;9324:18;;24391:67:0::1;9011:337:1::0;3601:244:0;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3690:22:0;::::1;3682:73;;;::::0;-1:-1:-1;;;3682:73:0;;9555:2:1;3682:73:0::1;::::0;::::1;9537:21:1::0;9594:2;9574:18;;;9567:30;9633:34;9613:18;;;9606:62;-1:-1:-1;;;9684:18:1;;;9677:36;9730:19;;3682:73:0::1;9353:402:1::0;3682:73:0::1;3792:6;::::0;;3771:38:::1;::::0;-1:-1:-1;;;;;3771:38:0;;::::1;::::0;3792:6;::::1;::::0;3771:38:::1;::::0;::::1;3820:6;:17:::0;;-1:-1:-1;;;;;;3820:17:0::1;-1:-1:-1::0;;;;;3820:17:0;;;::::1;::::0;;;::::1;::::0;;3601:244::o;5669:77::-;3358:6;;-1:-1:-1;;;;;3358:6:0;337:10;3358:22;3350:67;;;;-1:-1:-1;;;3350:67:0;;;;;;;:::i;:::-;5725:6:::1;:13:::0;;-1:-1:-1;;5725:13:0::1;5734:4;5725:13;::::0;;5669:77::o;11848:340::-;-1:-1:-1;;;;;11946:19:0;;11938:68;;;;-1:-1:-1;;;11938:68:0;;9962:2:1;11938:68:0;;;9944:21:1;10001:2;9981:18;;;9974:30;10040:34;10020:18;;;10013:62;-1:-1:-1;;;10091:18:1;;;10084:34;10135:19;;11938:68:0;9760:400:1;11938:68:0;-1:-1:-1;;;;;12025:21:0;;12017:68;;;;-1:-1:-1;;;12017:68:0;;10367:2:1;12017:68:0;;;10349:21:1;10406:2;10386:18;;;10379:30;10445:34;10425:18;;;10418:62;-1:-1:-1;;;10496:18:1;;;10489:32;10538:19;;12017:68:0;10165:398:1;12017:68:0;-1:-1:-1;;;;;12096:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12148:32;;160:25:1;;;12148:32:0;;133:18:1;12148:32:0;;;;;;;11848:340;;;:::o;1308:181::-;1366:7;;1398:5;1402:1;1398;:5;:::i;:::-;1386:17;;1427:1;1422;:6;;1414:46;;;;-1:-1:-1;;;1414:46:0;;10770:2:1;1414:46:0;;;10752:21:1;10809:2;10789:18;;;10782:30;10848:29;10828:18;;;10821:57;10895:18;;1414:46:0;10568:351:1;1414:46:0;1480:1;1308:181;-1:-1:-1;;;1308:181:0:o;12196:1256::-;5471:6;;12270:4;;12276:2;;5471:6;;;:26;;-1:-1:-1;;;;;;5481:16:0;;;;;;:10;:16;;;;;;;;5471:26;:44;;;-1:-1:-1;;;;;;5501:14:0;;;;;;:10;:14;;;;;;;;5471:44;5463:65;;;;-1:-1:-1;;;5463:65:0;;11126:2:1;5463:65:0;;;11108:21:1;11165:1;11145:18;;;11138:29;-1:-1:-1;;;11183:18:1;;;11176:38;11231:18;;5463:65:0;10924:331:1;5463:65:0;-1:-1:-1;;;;;12304:18:0;::::1;12296:68;;;::::0;-1:-1:-1;;;12296:68:0;;11462:2:1;12296:68:0::1;::::0;::::1;11444:21:1::0;11501:2;11481:18;;;11474:30;11540:34;11520:18;;;11513:62;-1:-1:-1;;;11591:18:1;;;11584:35;11636:19;;12296:68:0::1;11260:401:1::0;12296:68:0::1;-1:-1:-1::0;;;;;12383:16:0;::::1;12375:64;;;::::0;-1:-1:-1;;;12375:64:0;;11868:2:1;12375:64:0::1;::::0;::::1;11850:21:1::0;11907:2;11887:18;;;11880:30;11946:34;11926:18;;;11919:62;-1:-1:-1;;;11997:18:1;;;11990:33;12040:19;;12375:64:0::1;11666:399:1::0;12375:64:0::1;12467:1;12458:6;:10;12450:64;;;::::0;-1:-1:-1;;;12450:64:0;;12272:2:1;12450:64:0::1;::::0;::::1;12254:21:1::0;12311:2;12291:18;;;12284:30;12350:34;12330:18;;;12323:62;-1:-1:-1;;;12401:18:1;;;12394:39;12450:19;;:64:0::1;12070:405:1::0;12450:64:0::1;3269:7:::0;3296:6;-1:-1:-1;;;;;12528:15:0;;::::1;3296:6:::0;;12528:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3269:7:0;3296:6;-1:-1:-1;;;;;12547:13:0;;::::1;3296:6:::0;;12547:13:::1;;12528:32;12525:139;;;12595:12;;12585:6;:22;;12577:75;;;::::0;-1:-1:-1;;;12577:75:0;;12682:2:1;12577:75:0::1;::::0;::::1;12664:21:1::0;12721:2;12701:18;;;12694:30;12760:34;12740:18;;;12733:62;-1:-1:-1;;;12811:18:1;;;12804:38;12859:19;;12577:75:0::1;12480:404:1::0;12577:75:0::1;12676:28;12707:24;12725:4;12707:9;:24::i;:::-;12797:23;::::0;12676:55;;-1:-1:-1;12773:47:0;::::1;;12833:31;12847:4:::0;12853:2;12857:6;12833:13:::1;:31::i;:::-;12882:16;::::0;::::1;;12881:17;:42:::0;::::1;;;-1:-1:-1::0;12902:21:0::1;::::0;::::1;::::0;::::1;;;12881:42;:67;;;;;12935:13;-1:-1:-1::0;;;;;12927:21:0::1;:4;-1:-1:-1::0;;;;;12927:21:0::1;;;12881:67;12877:282;;;12978:23;12974:174;;;13058:23;;13035:46;;13100:32;13111:20;13100:10;:32::i;:::-;-1:-1:-1::0;;;;;13290:24:0;::::1;13171:12;13290:24:::0;;;:18:::1;:24;::::0;;;;;13186:4:::1;::::0;13290:24:::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;13318:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;13290:50;13287:106;;;-1:-1:-1::0;13376:5:0::1;13287:106;13403:41;13418:4;13424:2;13428:6;13436:7;13403:14;:41::i;:::-;12285:1167;;;12196:1256:::0;;;;;:::o;1641:192::-;1727:7;1763:12;1755:6;;;;1747:29;;;;-1:-1:-1;;;1747:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1787:9:0;1799:5;1803:1;1799;:5;:::i;:::-;1787:17;1641:192;-1:-1:-1;;;;;1641:192:0:o;2101:132::-;2159:7;2186:39;2190:1;2193;2186:39;;;;;;;;;;;;;;;;;:3;:39::i;1841:250::-;1899:7;1923:1;1928;1923:6;1919:47;;-1:-1:-1;1953:1:0;1946:8;;1919:47;1978:9;1990:5;1994:1;1990;:5;:::i;:::-;1978:17;-1:-1:-1;2023:1:0;2014:5;2018:1;1978:17;2014:5;:::i;:::-;:10;2006:56;;;;-1:-1:-1;;;2006:56:0;;13619:2:1;2006:56:0;;;13601:21:1;13658:2;13638:18;;;13631:30;13697:34;13677:18;;;13670:62;-1:-1:-1;;;13748:18:1;;;13741:31;13789:19;;2006:56:0;13417:397:1;11582:254:0;11649:7;11688;;11677;:18;;11669:73;;;;-1:-1:-1;;;11669:73:0;;14021:2:1;11669:73:0;;;14003:21:1;14060:2;14040:18;;;14033:30;14099:34;14079:18;;;14072:62;-1:-1:-1;;;14150:18:1;;;14143:40;14200:19;;11669:73:0;13819:406:1;11669:73:0;11753:19;11776:10;:8;:10::i;:::-;11753:33;-1:-1:-1;11804:24:0;:7;11753:33;11804:11;:24::i;25431:533::-;25526:18;25547:25;25565:6;25547:13;25557:2;25547:9;:13::i;:25::-;-1:-1:-1;;;;;25587:26:0;;;;;;:20;:26;;;;;;25526:46;;-1:-1:-1;25587:26:0;;25586:27;:56;;;;-1:-1:-1;;;;;;25618:24:0;;;;;;:20;:24;;;;;;;;25617:25;25586:56;25583:186;;;25690:22;;25676:10;:36;;25668:89;;;;-1:-1:-1;;;25668:89:0;;;;;;;:::i;:::-;25788:13;-1:-1:-1;;;;;25782:19:0;:4;-1:-1:-1;;;;;25782:19:0;;:48;;;;-1:-1:-1;;;;;;25806:24:0;;;;;;:20;:24;;;;;;;;25805:25;25782:48;25779:178;;;25878:22;;25864:10;:36;;25856:89;;;;-1:-1:-1;;;25856:89:0;;;;;;;:::i;13462:1314::-;8714:16;:23;;-1:-1:-1;;8714:23:0;8733:4;8714:23;;;13616:10:::1;::::0;13594:16:::1;::::0;13573::::1;::::0;8714;;13573:54:::1;::::0;13616:10;;13573:38:::1;::::0;:20:::1;:38::i;:54::-;13548:79;;13642:22;13667:57;13712:11;;13667:40;13689:17;;13667;;:21;;:40;;;;:::i;:57::-;13642:82:::0;-1:-1:-1;13735:25:0::1;13763:33;:13:::0;13642:82;13763:17:::1;:33::i;:::-;13735:61;;13809:27;13839:90;13927:1;13839:83;13904:17;13839:60;13881:17;;13864:16;;:34;;;;:::i;:::-;13839:20:::0;;:24:::1;:60::i;:::-;:64:::0;::::1;:83::i;:90::-;13809:120:::0;-1:-1:-1;13940:22:0::1;13965:45;:20:::0;13809:120;13965:24:::1;:45::i;:::-;13940:70;;14021:32;14038:14;14021:16;:32::i;:::-;14066:18;14087:21;14066:42;;14119:23;14145:80;14223:1;14145:73;14200:17;14145:50;14177:17;;14160:16;;:34;;;;:::i;:::-;14145:10:::0;;:14:::1;:50::i;:80::-;14119:106;;14261:1;14241:19;:21;:42;;;;;14282:1;14266:15;:17;14241:42;14238:133;;;14309:50;14322:19;14343:15;14309:12;:50::i;:::-;14383:23;14409:73;14464:17;14409:50;14441:17;;14424:16;;:34;;;;:::i;:::-;14409:10:::0;;:14:::1;:50::i;:73::-;14383:99:::0;-1:-1:-1;14496:17:0;;14493:99:::1;;14538:16;::::0;:42:::1;::::0;-1:-1:-1;;;;;14538:16:0;;::::1;::::0;:42;::::1;;;::::0;14564:15;;14538:16:::1;:42:::0;:16;:42;14564:15;14538:16;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14493:99;14604:17;14624:52;14660:15:::0;14624:31:::1;:10:::0;14639:15;14624:14:::1;:31::i;:::-;:35:::0;::::1;:52::i;:::-;14604:72:::0;-1:-1:-1;14690:11:0;;14687:82:::1;;14727:10;::::0;:30:::1;::::0;-1:-1:-1;;;;;14727:10:0;;::::1;::::0;:30;::::1;;;::::0;14747:9;;14727:10:::1;:30:::0;:10;:30;14747:9;14727:10;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14687:82;-1:-1:-1::0;;8760:16:0;:24;;-1:-1:-1;;8760:24:0;;;-1:-1:-1;;;;;;;;13462:1314:0:o;15849:985::-;15965:7;15961:355;;15999:14;22172:1;22153:16;:20;;;22184:16;:20;;;22215:10;:14;22110:127;15999:14;15961:355;;;16078:13;-1:-1:-1;;;;;16067:24:0;:9;-1:-1:-1;;;;;16067:24:0;;16064:89;;16125:12;22496:17;;22477:16;:36;22543:17;;22524:16;:36;22584:11;;22571:10;:24;22431:172;16125:12;16182:13;-1:-1:-1;;;;;16172:23:0;:6;-1:-1:-1;;;;;16172:23:0;;;:53;;;;;16212:13;-1:-1:-1;;;;;16199:26:0;:9;-1:-1:-1;;;;;16199:26:0;;;16172:53;16169:136;;;16259:30;22697:16;;22678;:35;22743:16;;22724;:35;22783:10;;22770;:23;22613:196;16259:30;-1:-1:-1;;;;;16334:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;16358:22:0;;;;;;:11;:22;;;;;;;;16357:23;16334:46;16330:467;;;16397:48;16419:6;16427:9;16438:6;16397:21;:48::i;:::-;16330:467;;;-1:-1:-1;;;;;16468:19:0;;;;;;:11;:19;;;;;;;;16467:20;:46;;;;-1:-1:-1;;;;;;16491:22:0;;;;;;:11;:22;;;;;;;;16467:46;16463:334;;;16530:46;16550:6;16558:9;16569:6;16530:19;:46::i;16463:334::-;-1:-1:-1;;;;;16598:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;16621:22:0;;;;;;:11;:22;;;;;;;;16598:45;16594:203;;;16660:48;16682:6;16690:9;16701:6;16660:21;:48::i;16594:203::-;16741:44;16759:6;16767:9;16778:6;16741:17;:44::i;:::-;16809:15;:13;:15::i;2241:278::-;2327:7;2362:12;2355:5;2347:28;;;;-1:-1:-1;;;2347:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2386:9:0;2398:5;2402:1;2398;:5;:::i;20195:163::-;20236:7;20257:15;20274;20293:19;:17;:19::i;:::-;20256:56;;-1:-1:-1;20256:56:0;-1:-1:-1;20330:20:0;20256:56;;20330:11;:20::i;:::-;20323:27;;;;20195:163;:::o;1497:136::-;1555:7;1582:43;1586:1;1589;1582:43;;;;;;;;;;;;;;;;;:3;:43::i;14784:527::-;14879:16;;;14893:1;14879:16;;;;;;;;14855:21;;14879:16;;;;;;;;;;-1:-1:-1;14879:16:0;14855:40;;14924:4;14906;14911:1;14906:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;14906:23:0;;;-1:-1:-1;;;;;14906:23:0;;;;;14950:15;-1:-1:-1;;;;;14950:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14940:4;14945:1;14940:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;14940:32:0;;;-1:-1:-1;;;;;14940:32:0;;;;;14983:62;15000:4;15015:15;15033:11;14983:8;:62::i;:::-;15056:196;;-1:-1:-1;;;15056:196:0;;-1:-1:-1;;;;;15056:15:0;:66;;;;:196;;15137:11;;15163:1;;15179:4;;15206;;15226:15;;15056:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15268:35;15285:11;15298:4;15268:35;;;;;;;:::i;:::-;;;;;;;;14844:467;14784:527;:::o;15323:516::-;15471:62;15488:4;15503:15;15521:11;15471:8;:62::i;:::-;15576:255;;-1:-1:-1;;;15576:255:0;;15648:4;15576:255;;;16626:34:1;16676:18;;;16669:34;;;15694:1:0;16719:18:1;;;16712:34;;;16762:18;;;16755:34;;;16805:19;;;16798:44;15805:15:0;16858:19:1;;;16851:35;15576:15:0;-1:-1:-1;;;;;15576:31:0;;;;15615:9;;16560:19:1;;15576:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15323:516;;:::o;17971:579::-;18074:15;18091:23;18116;18141:18;18163:19;18174:7;18163:10;:19::i;:::-;-1:-1:-1;;;;;18208:15:0;;;;;;:7;:15;;;;;;18073:109;;-1:-1:-1;18073:109:0;;-1:-1:-1;18073:109:0;-1:-1:-1;18073:109:0;-1:-1:-1;18208:28:0;;18228:7;18208:19;:28::i;:::-;-1:-1:-1;;;;;18190:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18265:7;:15;;;;:28;;18285:7;18265:19;:28::i;:::-;-1:-1:-1;;;;;18247:15:0;;;;;;;:7;:15;;;;;;:46;;;;18325:18;;;;;;;:39;;18348:15;18325:22;:39::i;:::-;-1:-1:-1;;;;;18304:18:0;;;;;;:7;:18;;;;;:60;18375:26;18390:10;18375:14;:26::i;:::-;18434:9;-1:-1:-1;;;;;18417:44:0;18426:6;-1:-1:-1;;;;;18417:44:0;;18445:15;18417:44;;;;160:25:1;;148:2;133:18;;14:177;18417:44:0;;;;;;;;18475:12;;18472:71;;18497:43;;160:25:1;;;18522:4:0;;-1:-1:-1;;;;;18497:43:0;;;;;148:2:1;133:18;18497:43:0;;;;;;;18472:71;18062:488;;;;17971:579;;;:::o;17372:591::-;17473:15;17490:23;17515;17540:18;17562:19;17573:7;17562:10;:19::i;:::-;-1:-1:-1;;;;;17607:15:0;;;;;;:7;:15;;;;;;17472:109;;-1:-1:-1;17472:109:0;;-1:-1:-1;17472:109:0;-1:-1:-1;17472:109:0;-1:-1:-1;17607:28:0;;17472:109;17607:19;:28::i;:::-;-1:-1:-1;;;;;17589:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;17667:18;;;;;:7;:18;;;;;:39;;17690:15;17667:22;:39::i;:::-;-1:-1:-1;;;;;17646:18:0;;;;;;:7;:18;;;;;;;;:60;;;;17738:7;:18;;;;:39;;17761:15;17738:22;:39::i;18558:650::-;18661:15;18678:23;18703;18728:18;18750:19;18761:7;18750:10;:19::i;:::-;-1:-1:-1;;;;;18795:15:0;;;;;;:7;:15;;;;;;18660:109;;-1:-1:-1;18660:109:0;;-1:-1:-1;18660:109:0;-1:-1:-1;18660:109:0;-1:-1:-1;18795:28:0;;18815:7;18795:19;:28::i;:::-;-1:-1:-1;;;;;18777:15:0;;;;;;:7;:15;;;;;;;;:46;;;;18852:7;:15;;;;:28;;18872:7;18852:19;:28::i;16842:522::-;16941:15;16958:23;16983;17009:18;17031:19;17042:7;17031:10;:19::i;:::-;-1:-1:-1;;;;;17079:15:0;;;;;;:7;:15;;;;;;16940:110;;-1:-1:-1;16940:110:0;;-1:-1:-1;16940:110:0;-1:-1:-1;16940:110:0;-1:-1:-1;17079:28:0;;16940:110;17079:19;:28::i;22245:178::-;22313:13;22327:1;22313:16;;;;;;;;:::i;:::-;;;;;;;;;22294;:35;;;;22359:13;22373:1;22359:16;;;;;;;;:::i;:::-;;;;;;;;;22340;:35;;;;22399:13;22413:1;22399:16;;;;;;;;:::i;:::-;;;;;;;;;;;22386:10;:29;22245:178::o;20366:555::-;20463:7;;20499;;20416;;;;;20517:289;20541:9;:16;20537:20;;20517:289;;;20607:7;20583;:21;20591:9;20601:1;20591:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20591:12:0;20583:21;;;;;;;;;;;;;:31;;:66;;;20642:7;20618;:21;20626:9;20636:1;20626:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20626:12:0;20618:21;;;;;;;;;;;;;:31;20583:66;20579:97;;;20659:7;;20668;;20651:25;;;;;;;20366:555;;:::o;20579:97::-;20701:34;20713:7;:21;20721:9;20731:1;20721:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20721:12:0;20713:21;;;;;;;;;;;;;20701:7;;:11;:34::i;:::-;20691:44;;20760:34;20772:7;:21;20780:9;20790:1;20780:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20780:12:0;20772:21;;;;;;;;;;;;;20760:7;;:11;:34::i;:::-;20750:44;-1:-1:-1;20559:3:0;;;;:::i;:::-;;;;20517:289;;;-1:-1:-1;20842:7:0;;20830;;:20;;:11;:20::i;:::-;20820:7;:30;20816:61;;;20860:7;;20869;;20852:25;;;;;;20366:555;;:::o;20816:61::-;20896:7;;20905;;-1:-1:-1;20366:555:0;-1:-1:-1;20366:555:0:o;19218:355::-;19277:7;19286;19295;19304;19325:23;19350:18;19372:20;19384:7;19372:11;:20::i;:::-;19324:68;;;;19404:15;19421:23;19448:44;19460:7;19469:10;19481;:8;:10::i;:::-;19448:11;:44::i;:::-;19403:89;;;;-1:-1:-1;19537:15:0;;-1:-1:-1;19554:10:0;;-1:-1:-1;19218:355:0;;-1:-1:-1;;;;19218:355:0:o;20929:368::-;20992:19;21015:10;:8;:10::i;:::-;20992:33;-1:-1:-1;21036:18:0;21057:27;:10;20992:33;21057:14;:27::i;:::-;21136:4;21120:22;;;;:7;:22;;;;;;21036:48;;-1:-1:-1;21120:38:0;;21036:48;21120:26;:38::i;:::-;21111:4;21095:22;;;;:7;:22;;;;;;;;:63;;;;21172:11;:26;;;;;;21169:121;;;21256:4;21240:22;;;;:7;:22;;;;;;:38;;21267:10;21240:26;:38::i;:::-;21231:4;21215:22;;;;:7;:22;;;;;:63;20981:316;;20929:368;:::o;19581:255::-;19641:7;19650;19670:18;19691:30;19713:7;19691:21;:30::i;:::-;19670:51;-1:-1:-1;19732:23:0;19758;:7;19670:51;19758:11;:23::i;:::-;19732:49;19817:10;;-1:-1:-1;19581:255:0;;-1:-1:-1;;;19581:255:0:o;19844:343::-;19945:7;;;19992:24;:7;20004:11;19992;:24::i;:::-;19974:42;-1:-1:-1;20027:18:0;20048:27;:10;20063:11;20048:14;:27::i;:::-;20027:48;-1:-1:-1;20086:23:0;20112;:7;20027:48;20112:11;:23::i;:::-;20154:7;;;;-1:-1:-1;19844:343:0;;-1:-1:-1;;;;;;19844:343:0:o;21307:212::-;21377:7;21397:12;21412:54;21455:10;;21412:38;21433:16;;21412;;:20;;:38;;;;:::i;:54::-;21397:69;-1:-1:-1;21484:27:0;21506:4;21484:17;:7;21397:69;21484: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:134;953:20;;982:31;953:20;982:31;:::i;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:316::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;-1:-1:-1;;1721:23:1;;;1791:2;1776:18;;1763:32;;-1:-1:-1;1842:2:1;1827:18;;;1814:32;;1536:316;-1:-1:-1;1536:316:1:o;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2965:247::-;3024:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;3132:9;3119:23;3151:31;3176:5;3151:31;:::i;3217:180::-;3276:6;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;-1:-1:-1;3368:23:1;;3217:180;-1:-1:-1;3217:180:1:o;3610:160::-;3675:20;;3731:13;;3724:21;3714:32;;3704:60;;3760:1;3757;3750:12;3775:315;3840:6;3848;3901:2;3889:9;3880:7;3876:23;3872:32;3869:52;;;3917:1;3914;3907:12;3869:52;3956:9;3943:23;3975:31;4000:5;3975:31;:::i;:::-;4025:5;-1:-1:-1;4049:35:1;4080:2;4065:18;;4049:35;:::i;:::-;4039:45;;3775:315;;;;;:::o;4095:127::-;4156:10;4151:3;4147:20;4144:1;4137:31;4187:4;4184:1;4177:15;4211:4;4208:1;4201:15;4227:908;4281:5;4334:3;4327:4;4319:6;4315:17;4311:27;4301:55;;4352:1;4349;4342:12;4301:55;4388:6;4375:20;4414:4;4437:18;4474:2;4470;4467:10;4464:36;;;4480:18;;:::i;:::-;4526:2;4523:1;4519:10;4558:2;4552:9;4621:2;4617:7;4612:2;4608;4604:11;4600:25;4592:6;4588:38;4676:6;4664:10;4661:22;4656:2;4644:10;4641:18;4638:46;4635:72;;;4687:18;;:::i;:::-;4723:2;4716:22;4773:18;;;4849:15;;;4845:24;;;4807:15;;;;-1:-1:-1;4881:15:1;;;4878:35;;;4909:1;4906;4899:12;4878:35;4945:2;4937:6;4933:15;4922:26;;4957:148;4973:6;4968:3;4965:15;4957:148;;;5039:23;5058:3;5039:23;:::i;:::-;5027:36;;5083:12;;;;4990;;;;4957:148;;;5123:6;4227:908;-1:-1:-1;;;;;;;4227:908:1:o;5140:348::-;5224:6;5277:2;5265:9;5256:7;5252:23;5248:32;5245:52;;;5293:1;5290;5283:12;5245:52;5333:9;5320:23;5366:18;5358:6;5355:30;5352:50;;;5398:1;5395;5388:12;5352:50;5421:61;5474:7;5465:6;5454:9;5450:22;5421:61;:::i;:::-;5411:71;5140:348;-1:-1:-1;;;;5140:348:1:o;5493:180::-;5549:6;5602:2;5590:9;5581:7;5577:23;5573:32;5570:52;;;5618:1;5615;5608:12;5570:52;5641:26;5657:9;5641:26;:::i;5678:388::-;5746:6;5754;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;5862:9;5849:23;5881:31;5906:5;5881:31;:::i;:::-;5931:5;-1:-1:-1;5988:2:1;5973:18;;5960:32;6001:33;5960:32;6001:33;:::i;:::-;6053:7;6043:17;;;5678:388;;;;;:::o;6071:416::-;6161:6;6169;6222:2;6210:9;6201:7;6197:23;6193:32;6190:52;;;6238:1;6235;6228:12;6190:52;6278:9;6265:23;6311:18;6303:6;6300:30;6297:50;;;6343:1;6340;6333:12;6297:50;6366:61;6419:7;6410:6;6399:9;6395:22;6366:61;:::i;:::-;6356:71;;;6446:35;6477:2;6466:9;6462:18;6446:35;:::i;6492:380::-;6571:1;6567:12;;;;6614;;;6635:61;;6689:4;6681:6;6677:17;6667:27;;6635:61;6742:2;6734:6;6731:14;6711:18;6708:38;6705:161;;6788:10;6783:3;6779:20;6776:1;6769:31;6823:4;6820:1;6813:15;6851:4;6848:1;6841:15;6705:161;;6492:380;;;:::o;6877:356::-;7079:2;7061:21;;;7098:18;;;7091:30;7157:34;7152:2;7137:18;;7130:62;7224:2;7209:18;;6877:356::o;7238:127::-;7299:10;7294:3;7290:20;7287:1;7280:31;7330:4;7327:1;7320:15;7354:4;7351:1;7344:15;7370:125;7435:9;;;7456:10;;;7453:36;;;7469:18;;:::i;7500:336::-;7702:2;7684:21;;;7741:2;7721:18;;;7714:30;-1:-1:-1;;;7775:2:1;7760:18;;7753:42;7827:2;7812:18;;7500:336::o;8739:127::-;8800:10;8795:3;8791:20;8788:1;8781:31;8831:4;8828:1;8821:15;8855:4;8852:1;8845:15;8871:135;8910:3;8931:17;;;8928:43;;8951:18;;:::i;:::-;-1:-1:-1;8998:1:1;8987:13;;8871:135::o;12889:128::-;12956:9;;;12977:11;;;12974:37;;;12991:18;;:::i;13022:168::-;13095:9;;;13126;;13143:15;;;13137:22;;13123:37;13113:71;;13164:18;;:::i;13195:217::-;13235:1;13261;13251:132;;13305:10;13300:3;13296:20;13293:1;13286:31;13340:4;13337:1;13330:15;13368:4;13365:1;13358:15;13251:132;-1:-1:-1;13397:9:1;;13195:217::o;14230:404::-;14432:2;14414:21;;;14471:2;14451:18;;;14444:30;14510:34;14505:2;14490:18;;14483:62;-1:-1:-1;;;14576:2:1;14561:18;;14554:38;14624:3;14609:19;;14230:404::o;14639:251::-;14709:6;14762:2;14750:9;14741:7;14737:23;14733:32;14730:52;;;14778:1;14775;14768:12;14730:52;14810:9;14804:16;14829:31;14854:5;14829:31;:::i;14895:461::-;14948:3;14986:5;14980:12;15013:6;15008:3;15001:19;15039:4;15068:2;15063:3;15059:12;15052:19;;15105:2;15098:5;15094:14;15126:1;15136:195;15150:6;15147:1;15144:13;15136:195;;;15215:13;;-1:-1:-1;;;;;15211:39:1;15199:52;;15271:12;;;;15306:15;;;;15247:1;15165:9;15136:195;;;-1:-1:-1;15347:3:1;;14895:461;-1:-1:-1;;;;;14895:461:1:o;15361:582::-;15660:6;15649:9;15642:25;15703:6;15698:2;15687:9;15683:18;15676:34;15746:3;15741:2;15730:9;15726:18;15719:31;15623:4;15767:57;15819:3;15808:9;15804:19;15796:6;15767:57;:::i;:::-;-1:-1:-1;;;;;15860:32:1;;;;15855:2;15840:18;;15833:60;-1:-1:-1;15924:3:1;15909:19;15902:35;15759:65;15361:582;-1:-1:-1;;;15361:582:1:o;15948:332::-;16155:6;16144:9;16137:25;16198:2;16193;16182:9;16178:18;16171:30;16118:4;16218:56;16270:2;16259:9;16255:18;16247:6;16218:56;:::i;16897:306::-;16985:6;16993;17001;17054:2;17042:9;17033:7;17029:23;17025:32;17022:52;;;17070:1;17067;17060:12;17022:52;17099:9;17093:16;17083:26;;17149:2;17138:9;17134:18;17128:25;17118:35;;17193:2;17182:9;17178:18;17172:25;17162:35;;16897:306;;;;;:::o

Swarm Source

ipfs://6fc91bf166b715fb105393c39452772e15f8996c75124ac511b91a222357f3e5
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.