ETH Price: $2,568.63 (-3.06%)

Token

IronManSale (IMS)
 

Overview

Max Total Supply

10,000,000,000 IMS

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
dragonofdojima.eth
Balance
156,631,515.278049636035355252 IMS

Value
$0.00
0x74809682C8AeAf56eBb6384E86A5A6Fc972E72DF
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:
IronManSale

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-09
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private asdasd;
    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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract IronManSale is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using Address for address;

    string private _name = "IronManSale";
    string private _symbol = "IMS";
    uint8 private _decimals = 18;

    address payable public marketingWalletAddress = payable(0x1a1323fF8A6178C57020a8055BADb34E24f98387);
    address payable public liqWalletAddress = payable(0x1a1323fF8A6178C57020a8055BADb34E24f98387);

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

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

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;
    mapping(address => bool) public isbotBlackList;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 2;

    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellMarketingFee = 3;

    uint256 public _liquidityShare = 3;
    uint256 public _marketingShare = 5;

    uint256 public _totalTaxIfBuying = 3;
    uint256 public _totalTaxIfSelling = 5;
    uint256 public _totalDistributionShares = 8;

    uint256 private _totalSupply =  10000000000 * 10**_decimals;
    uint256 public _maxTxAmount =   10000000000 * 10**_decimals;
    uint256 public _walletMax =     10000000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 10000000 * 10**_decimals;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

    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 minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function burnETH(address payable burnAddress) external onlyOwner {
        burnAddress.transfer(address(this).balance);
    }

    function rescueToken(address tokenAddress, uint256 tokens) public onlyOwner returns (bool success) {
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

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

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
    }

    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare);
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
        checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setliqWalletAddress(address newAddress) external onlyOwner() {
        liqWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {

        _transfer(_msgSender(), recipient, 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 _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!isbotBlackList[sender], "account is bot");

        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

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

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

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

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ?
            amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

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

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));

        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            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
            liqWalletAddress,
            block.timestamp
        );
    }



    function setblacklist(address _account) external onlyOwner {
        if (isbotBlackList[_account]) {
            isbotBlackList[_account] = false;
        } else {
            isbotBlackList[_account] = true;
        }
    }


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

        uint256 feeAmount = 0;

        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

}

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":"SwapETHForTokens","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":"_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":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","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":"_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":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":"address payable","name":"burnAddress","type":"address"}],"name":"burnETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isbotBlackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setliqWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600b60a08190526a49726f6e4d616e53616c6560a81b60c09081526200002e916003919062000661565b5060408051808201909152600380825262494d5360e81b60209092019182526200005b9160049162000661565b5060058054741a1323ff8a6178c57020a8055badb34e24f98387126001600160a81b0319909116178155600680546001600160a01b031916731a1323ff8a6178c57020a8055badb34e24f983871790556ddead0000000000000000000000006080526001600e556002600f81905560105560036011819055601281815560138390556014919091556015919091556008601655620000fb90600a62000794565b6200010c906402540be40062000860565b601755600554620001229060ff16600a62000794565b62000133906402540be40062000860565b601855600554620001499060ff16600a62000794565b6200015a906402540be40062000860565b601955600554620001709060ff16600a62000794565b6200017f906298968062000860565b601a55601c805462ffffff60a81b19166201000160a81b179055348015620001a657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023b57600080fd5b505afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000276919062000707565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bf57600080fd5b505afa158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa919062000707565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034357600080fd5b505af115801562000358573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037e919062000707565b601c80546001600160a01b039283166001600160a01b031991821617909155601b8054928416929091168217905560175430600090815260086020908152604080832094835293905291822055600190600990620003e46000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260098352208054909216600117909155600f54600e5462000440929091906200185b620005f2821b17901c565b60148190555062000464601154601054620005f260201b6200185b1790919060201c565b60158190555062000488601354601254620005f260201b6200185b1790919060201c565b6016556001600a6000620004a46000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601c549091168152600a90925280822080548416600190811790915530835290822080549093168117909255600b90620005146000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600b8452828120805486166001908117909155601c549092168152600c90935290822080549093161790915560175490600790620005803390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601754604051620005e391815260200190565b60405180910390a350620008d5565b60008062000601838562000730565b905083811015620006585760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b8280546200066f9062000882565b90600052602060002090601f016020900481019282620006935760008555620006de565b82601f10620006ae57805160ff1916838001178555620006de565b82800160010185558215620006de579182015b82811115620006de578251825591602001919060010190620006c1565b50620006ec929150620006f0565b5090565b5b80821115620006ec5760008155600101620006f1565b60006020828403121562000719578081fd5b81516001600160a01b038116811462000658578182fd5b60008219821115620007465762000746620008bf565b500190565b600181815b808511156200078c578160001904821115620007705762000770620008bf565b808516156200077e57918102915b93841c939080029062000750565b509250929050565b6000620007a560ff841683620007ac565b9392505050565b600082620007bd575060016200065b565b81620007cc575060006200065b565b8160018114620007e55760028114620007f05762000810565b60019150506200065b565b60ff841115620008045762000804620008bf565b50506001821b6200065b565b5060208310610133831016604e8410600b841016171562000835575081810a6200065b565b6200084183836200074b565b8060001904821115620008585762000858620008bf565b029392505050565b60008160001904831182151516156200087d576200087d620008bf565b500290565b600181811c908216806200089757607f821691505b60208210811415620008b957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c61294a620008fb600039600081816104ed0152610d7b015261294a6000f3fe60806040526004361061039b5760003560e01c80638b42507f116101dc578063c816841b11610102578063ec28438a116100a0578063f1d5f5171161006f578063f1d5f51714610adb578063f2fde38b14610afb578063f84ba65d14610b1b578063f872858a14610b3b57600080fd5b8063ec28438a14610a65578063eea5b63f14610a85578063ef422a1814610aa5578063f0cd1dac14610ac557600080fd5b8063d158272d116100dc578063d158272d146109c3578063da00097d146109e8578063dc44b6a014610a09578063dd62ed3e14610a1f57600080fd5b8063c816841b1461095d578063c86079521461097d578063c867d60b1461099357600080fd5b8063a08e671f1161017a578063aa35822c11610149578063aa35822c146108d7578063bdfc2990146108f7578063c49b9a8014610927578063c5d241891461094757600080fd5b8063a08e671f14610861578063a457c2d714610877578063a5d69d1f14610897578063a9059cbb146108b757600080fd5b8063914eb66a116101b6578063914eb66a1461080257806395d89b41146108175780639df8131f1461082c578063a073d37f1461084c57600080fd5b80638b42507f146107945780638bc6f3a8146107c45780638da5cb5b146107e457600080fd5b80634a74bb02116102c157806361a23c691161025f578063807c2d9c1161022e578063807c2d9c1461073257806382eefb4314610748578063844d591c1461075e57806388790a681461077e57600080fd5b806361a23c69146106b057806361ced01d146106c657806370a08231146106e65780637d1db4a51461071c57600080fd5b8063557ed1ba1161029b578063557ed1ba1461064757806357a5802f1461065a5780635881f3ef146106705780635c5ba4481461069057600080fd5b80634a74bb02146105d65780634cb80fd5146105f75780635342acb41461061757600080fd5b80632563ae831161033957806333f3d6281161030857806333f3d6281461054657806339509351146105665780633b97084a146105865780633ecad271146105a657600080fd5b80632563ae83146104bb57806327c8f835146104db5780632b112e491461050f578063313ce5671461052457600080fd5b80631694505e116103755780631694505e1461042457806318160ddd1461045c5780632198cf6c1461047b57806323b872dd1461049b57600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630b3032061461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b5c565b6040516103c99190612700565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046125f4565b610bee565b60405190151581526020016103c9565b34801561040e57600080fd5b5061042261041d366004612517565b610c05565b005b34801561043057600080fd5b50601b54610444906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561046857600080fd5b506017545b6040519081526020016103c9565b34801561048757600080fd5b506104226104963660046125c7565b610c71565b3480156104a757600080fd5b506103f26104b6366004612587565b610cc6565b3480156104c757600080fd5b506104226104d636600461261f565b610d31565b3480156104e757600080fd5b506104447f000000000000000000000000000000000000000000000000000000000000000081565b34801561051b57600080fd5b5061046d610d79565b34801561053057600080fd5b5060055460405160ff90911681526020016103c9565b34801561055257600080fd5b506103f26105613660046125f4565b610dc3565b34801561057257600080fd5b506103f26105813660046125f4565b610e6e565b34801561059257600080fd5b506104226105a1366004612657565b610ea4565b3480156105b257600080fd5b506103f26105c1366004612517565b600c6020526000908152604090205460ff1681565b3480156105e257600080fd5b50601c546103f290600160a81b900460ff1681565b34801561060357600080fd5b50610422610612366004612517565b610ed3565b34801561062357600080fd5b506103f2610632366004612517565b60096020526000908152604090205460ff1681565b34801561065357600080fd5b504261046d565b34801561066657600080fd5b5061046d60125481565b34801561067c57600080fd5b5061044461068b366004612517565b610f25565b34801561069c57600080fd5b506104226106ab366004612517565b6112b7565b3480156106bc57600080fd5b5061046d60135481565b3480156106d257600080fd5b50600654610444906001600160a01b031681565b3480156106f257600080fd5b5061046d610701366004612517565b6001600160a01b031660009081526007602052604090205490565b34801561072857600080fd5b5061046d60185481565b34801561073e57600080fd5b5061046d60195481565b34801561075457600080fd5b5061046d60155481565b34801561076a57600080fd5b506104226107793660046125c7565b61134a565b34801561078a57600080fd5b5061046d60105481565b3480156107a057600080fd5b506103f26107af366004612517565b600b6020526000908152604090205460ff1681565b3480156107d057600080fd5b506104226107df366004612517565b61139f565b3480156107f057600080fd5b506000546001600160a01b0316610444565b34801561080e57600080fd5b506104226113eb565b34801561082357600080fd5b506103bc611465565b34801561083857600080fd5b5061042261084736600461266f565b611474565b34801561085857600080fd5b50601a5461046d565b34801561086d57600080fd5b5061046d60165481565b34801561088357600080fd5b506103f26108923660046125f4565b6114b9565b3480156108a357600080fd5b506104226108b236600461261f565b611508565b3480156108c357600080fd5b506103f26108d23660046125f4565b611550565b3480156108e357600080fd5b506104226108f236600461266f565b61155d565b34801561090357600080fd5b506103f2610912366004612517565b600d6020526000908152604090205460ff1681565b34801561093357600080fd5b5061042261094236600461261f565b6115a2565b34801561095357600080fd5b5061046d600f5481565b34801561096957600080fd5b50601c54610444906001600160a01b031681565b34801561098957600080fd5b5061046d60115481565b34801561099f57600080fd5b506103f26109ae366004612517565b600a6020526000908152604090205460ff1681565b3480156109cf57600080fd5b506005546104449061010090046001600160a01b031681565b3480156109f457600080fd5b50601c546103f290600160b01b900460ff1681565b348015610a1557600080fd5b5061046d600e5481565b348015610a2b57600080fd5b5061046d610a3a36600461254f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a7157600080fd5b50610422610a80366004612657565b611624565b348015610a9157600080fd5b50610422610aa036600461266f565b611653565b348015610ab157600080fd5b50610422610ac03660046125c7565b611698565b348015610ad157600080fd5b5061046d60145481565b348015610ae757600080fd5b50610422610af6366004612657565b6116ed565b348015610b0757600080fd5b50610422610b16366004612517565b61171c565b348015610b2757600080fd5b50610422610b363660046125c7565b611806565b348015610b4757600080fd5b50601c546103f290600160b81b900460ff1681565b606060038054610b6b90612853565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9790612853565b8015610be45780601f10610bb957610100808354040283529160200191610be4565b820191906000526020600020905b815481529060010190602001808311610bc757829003601f168201915b5050505050905090565b6000610bfb3384846118ba565b5060015b92915050565b6000546001600160a01b03163314610c385760405162461bcd60e51b8152600401610c2f90612753565b60405180910390fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c6d573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610cd38484846119de565b50610d268433610d21856040518060600160405280602881526020016128c8602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611e0d565b6118ba565b5060015b9392505050565b6000546001600160a01b03163314610d5b5760405162461bcd60e51b8152600401610c2f90612753565b601c8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260076020526040812054601754610dbe91611e47565b905090565b600080546001600160a01b03163314610dee5760405162461bcd60e51b8152600401610c2f90612753565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015610e3657600080fd5b505af1158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061263b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610bfb918590610d21908661185b565b6000546001600160a01b03163314610ece5760405162461bcd60e51b8152600401610c2f90612753565b601a55565b6000546001600160a01b03163314610efd5760405162461bcd60e51b8152600401610c2f90612753565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b03163314610f505760405162461bcd60e51b8152600401610c2f90612753565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8e57600080fd5b505afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612533565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612533565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561108c57600080fd5b505afa1580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190612533565b91506001600160a01b03821661124857806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561110d57600080fd5b505afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190612533565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190612533565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561120d57600080fd5b505af1158015611221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112459190612533565b91505b601c80546001600160a01b03199081166001600160a01b038581169182178455601b8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146112e15760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b0381166000908152600d602052604090205460ff1615611323576001600160a01b03166000908152600d60205260409020805460ff19169055565b6001600160a01b0381166000908152600d60205260409020805460ff191660011790555b50565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b8152600401610c2f90612753565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114155760405162461bcd60e51b8152600401610c2f90612753565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060048054610b6b90612853565b6000546001600160a01b0316331461149e5760405162461bcd60e51b8152600401610c2f90612753565b601082905560118190556114b2828261185b565b6015555050565b6000610bfb3384610d21856040518060600160405280602581526020016128f0602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611e0d565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610c2f90612753565b601c8054911515600160b01b0260ff60b01b19909216919091179055565b6000610d263384846119de565b6000546001600160a01b031633146115875760405162461bcd60e51b8152600401610c2f90612753565b600e829055600f81905561159b828261185b565b6014555050565b6000546001600160a01b031633146115cc5760405162461bcd60e51b8152600401610c2f90612753565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461164e5760405162461bcd60e51b8152600401610c2f90612753565b601855565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610c2f90612753565b60128290556013819055611691828261185b565b6016555050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117175760405162461bcd60e51b8152600401610c2f90612753565b601955565b6000546001600160a01b031633146117465760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b0381166117ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118305760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008061186883856127e5565b905083811015610d2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2f565b6001600160a01b03831661191c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2f565b6001600160a01b03821661197d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2f565b6001600160a01b038316611aa65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2f565b6001600160a01b0384166000908152600d602052604090205460ff1615611b005760405162461bcd60e51b815260206004820152600e60248201526d1858d8dbdd5b9d081a5cc8189bdd60921b6044820152606401610c2f565b601c54600160a01b900460ff1615611b2457611b1d848484611e89565b9050610d2a565b6001600160a01b0384166000908152600b602052604090205460ff16158015611b6657506001600160a01b0383166000908152600b602052604090205460ff16155b15611bce57601854821115611bce5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2f565b30600090815260076020526040902054601a5481108015908190611bfc5750601c54600160a01b900460ff16155b8015611c2157506001600160a01b0386166000908152600c602052604090205460ff16155b8015611c365750601c54600160a81b900460ff165b15611c5c57601c54600160b01b900460ff1615611c5357601a5491505b611c5c82611f6f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611cae918690611e0d565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611cfb57506001600160a01b03861660009081526009602052604090205460ff165b611d0f57611d0a878787612066565b611d11565b845b601c54909150600160b81b900460ff168015611d4657506001600160a01b0386166000908152600a602052604090205460ff16155b15611d8257601954611d7782611d71896001600160a01b031660009081526007602052604090205490565b9061185b565b1115611d8257600080fd5b6001600160a01b038616600090815260076020526040902054611da5908261185b565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b60405180910390a360019350505050610d2a565b60008184841115611e315760405162461bcd60e51b8152600401610c2f9190612700565b506000611e3e848661283c565b95945050505050565b6000610d2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e0d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611eda918490611e0d565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611f09908361185b565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f5d9086815260200190565b60405180910390a35060019392505050565b601c805460ff60a01b1916600160a01b179055601654601254600091611fa591600291611f9f918290879061216c565b906121eb565b90506000611fb38383611e47565b9050611fbe8161222d565b6012544790600090611fde90611fd59060026121eb565b60165490611e47565b905060006120006002611f9f84611f9f6012548861216c90919063ffffffff16565b9050600061200e8483611e47565b90508015612031576005546120319061010090046001600160a01b0316826123eb565b6000821180156120415750600086115b15612050576120508683612426565b5050601c805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff16156120aa576120a36064611f9f6014548661216c90919063ffffffff16565b90506120e8565b6001600160a01b0384166000908152600c602052604090205460ff16156120e8576120e56064611f9f6015548661216c90919063ffffffff16565b90505b80156121625730600090815260076020526040902054612108908261185b565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121599085815260200190565b60405180910390a35b611e3e8382611e47565b60008261217b57506000610bff565b6000612187838561281d565b90508261219485836127fd565b14610d2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2f565b6000610d2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061227057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc9190612533565b8160018151811061231d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5461234391309116846118ba565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061237c9085906000908690309042906004016127a9565b600060405180830381600087803b15801561239657600080fd5b505af11580156123aa573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516123df929190612788565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612421573d6000803e3d6000fd5b505050565b601b5461243e9030906001600160a01b0316846118ba565b601b5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156124a957600080fd5b505af11580156124bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124e29190612690565b5050505050565b6000818361250a5760405162461bcd60e51b8152600401610c2f9190612700565b506000611e3e84866127fd565b600060208284031215612528578081fd5b8135610d2a816128a4565b600060208284031215612544578081fd5b8151610d2a816128a4565b60008060408385031215612561578081fd5b823561256c816128a4565b9150602083013561257c816128a4565b809150509250929050565b60008060006060848603121561259b578081fd5b83356125a6816128a4565b925060208401356125b6816128a4565b929592945050506040919091013590565b600080604083850312156125d9578182fd5b82356125e4816128a4565b9150602083013561257c816128b9565b60008060408385031215612606578182fd5b8235612611816128a4565b946020939093013593505050565b600060208284031215612630578081fd5b8135610d2a816128b9565b60006020828403121561264c578081fd5b8151610d2a816128b9565b600060208284031215612668578081fd5b5035919050565b60008060408385031215612681578182fd5b50508035926020909101359150565b6000806000606084860312156126a4578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156126f55781516001600160a01b0316875295820195908201906001016126d0565b509495945050505050565b6000602080835283518082850152825b8181101561272c57858101830151858201604001528201612710565b8181111561273d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127a160408301846126bd565b949350505050565b85815284602082015260a0604082015260006127c860a08301866126bd565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156127f8576127f861288e565b500190565b60008261281857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128375761283761288e565b500290565b60008282101561284e5761284e61288e565b500390565b600181811c9082168061286757607f821691505b6020821081141561288857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461134757600080fd5b801515811461134757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f5691561c53cb64883f372cec7ee299392aeeffcd173a864944386dca7630d5c64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80638b42507f116101dc578063c816841b11610102578063ec28438a116100a0578063f1d5f5171161006f578063f1d5f51714610adb578063f2fde38b14610afb578063f84ba65d14610b1b578063f872858a14610b3b57600080fd5b8063ec28438a14610a65578063eea5b63f14610a85578063ef422a1814610aa5578063f0cd1dac14610ac557600080fd5b8063d158272d116100dc578063d158272d146109c3578063da00097d146109e8578063dc44b6a014610a09578063dd62ed3e14610a1f57600080fd5b8063c816841b1461095d578063c86079521461097d578063c867d60b1461099357600080fd5b8063a08e671f1161017a578063aa35822c11610149578063aa35822c146108d7578063bdfc2990146108f7578063c49b9a8014610927578063c5d241891461094757600080fd5b8063a08e671f14610861578063a457c2d714610877578063a5d69d1f14610897578063a9059cbb146108b757600080fd5b8063914eb66a116101b6578063914eb66a1461080257806395d89b41146108175780639df8131f1461082c578063a073d37f1461084c57600080fd5b80638b42507f146107945780638bc6f3a8146107c45780638da5cb5b146107e457600080fd5b80634a74bb02116102c157806361a23c691161025f578063807c2d9c1161022e578063807c2d9c1461073257806382eefb4314610748578063844d591c1461075e57806388790a681461077e57600080fd5b806361a23c69146106b057806361ced01d146106c657806370a08231146106e65780637d1db4a51461071c57600080fd5b8063557ed1ba1161029b578063557ed1ba1461064757806357a5802f1461065a5780635881f3ef146106705780635c5ba4481461069057600080fd5b80634a74bb02146105d65780634cb80fd5146105f75780635342acb41461061757600080fd5b80632563ae831161033957806333f3d6281161030857806333f3d6281461054657806339509351146105665780633b97084a146105865780633ecad271146105a657600080fd5b80632563ae83146104bb57806327c8f835146104db5780632b112e491461050f578063313ce5671461052457600080fd5b80631694505e116103755780631694505e1461042457806318160ddd1461045c5780632198cf6c1461047b57806323b872dd1461049b57600080fd5b806306fdde03146103a7578063095ea7b3146103d25780630b3032061461040257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610b5c565b6040516103c99190612700565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046125f4565b610bee565b60405190151581526020016103c9565b34801561040e57600080fd5b5061042261041d366004612517565b610c05565b005b34801561043057600080fd5b50601b54610444906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b34801561046857600080fd5b506017545b6040519081526020016103c9565b34801561048757600080fd5b506104226104963660046125c7565b610c71565b3480156104a757600080fd5b506103f26104b6366004612587565b610cc6565b3480156104c757600080fd5b506104226104d636600461261f565b610d31565b3480156104e757600080fd5b506104447f000000000000000000000000000000000000000000000000000000000000dead81565b34801561051b57600080fd5b5061046d610d79565b34801561053057600080fd5b5060055460405160ff90911681526020016103c9565b34801561055257600080fd5b506103f26105613660046125f4565b610dc3565b34801561057257600080fd5b506103f26105813660046125f4565b610e6e565b34801561059257600080fd5b506104226105a1366004612657565b610ea4565b3480156105b257600080fd5b506103f26105c1366004612517565b600c6020526000908152604090205460ff1681565b3480156105e257600080fd5b50601c546103f290600160a81b900460ff1681565b34801561060357600080fd5b50610422610612366004612517565b610ed3565b34801561062357600080fd5b506103f2610632366004612517565b60096020526000908152604090205460ff1681565b34801561065357600080fd5b504261046d565b34801561066657600080fd5b5061046d60125481565b34801561067c57600080fd5b5061044461068b366004612517565b610f25565b34801561069c57600080fd5b506104226106ab366004612517565b6112b7565b3480156106bc57600080fd5b5061046d60135481565b3480156106d257600080fd5b50600654610444906001600160a01b031681565b3480156106f257600080fd5b5061046d610701366004612517565b6001600160a01b031660009081526007602052604090205490565b34801561072857600080fd5b5061046d60185481565b34801561073e57600080fd5b5061046d60195481565b34801561075457600080fd5b5061046d60155481565b34801561076a57600080fd5b506104226107793660046125c7565b61134a565b34801561078a57600080fd5b5061046d60105481565b3480156107a057600080fd5b506103f26107af366004612517565b600b6020526000908152604090205460ff1681565b3480156107d057600080fd5b506104226107df366004612517565b61139f565b3480156107f057600080fd5b506000546001600160a01b0316610444565b34801561080e57600080fd5b506104226113eb565b34801561082357600080fd5b506103bc611465565b34801561083857600080fd5b5061042261084736600461266f565b611474565b34801561085857600080fd5b50601a5461046d565b34801561086d57600080fd5b5061046d60165481565b34801561088357600080fd5b506103f26108923660046125f4565b6114b9565b3480156108a357600080fd5b506104226108b236600461261f565b611508565b3480156108c357600080fd5b506103f26108d23660046125f4565b611550565b3480156108e357600080fd5b506104226108f236600461266f565b61155d565b34801561090357600080fd5b506103f2610912366004612517565b600d6020526000908152604090205460ff1681565b34801561093357600080fd5b5061042261094236600461261f565b6115a2565b34801561095357600080fd5b5061046d600f5481565b34801561096957600080fd5b50601c54610444906001600160a01b031681565b34801561098957600080fd5b5061046d60115481565b34801561099f57600080fd5b506103f26109ae366004612517565b600a6020526000908152604090205460ff1681565b3480156109cf57600080fd5b506005546104449061010090046001600160a01b031681565b3480156109f457600080fd5b50601c546103f290600160b01b900460ff1681565b348015610a1557600080fd5b5061046d600e5481565b348015610a2b57600080fd5b5061046d610a3a36600461254f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610a7157600080fd5b50610422610a80366004612657565b611624565b348015610a9157600080fd5b50610422610aa036600461266f565b611653565b348015610ab157600080fd5b50610422610ac03660046125c7565b611698565b348015610ad157600080fd5b5061046d60145481565b348015610ae757600080fd5b50610422610af6366004612657565b6116ed565b348015610b0757600080fd5b50610422610b16366004612517565b61171c565b348015610b2757600080fd5b50610422610b363660046125c7565b611806565b348015610b4757600080fd5b50601c546103f290600160b81b900460ff1681565b606060038054610b6b90612853565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9790612853565b8015610be45780601f10610bb957610100808354040283529160200191610be4565b820191906000526020600020905b815481529060010190602001808311610bc757829003601f168201915b5050505050905090565b6000610bfb3384846118ba565b5060015b92915050565b6000546001600160a01b03163314610c385760405162461bcd60e51b8152600401610c2f90612753565b60405180910390fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610c6d573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610cd38484846119de565b50610d268433610d21856040518060600160405280602881526020016128c8602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611e0d565b6118ba565b5060015b9392505050565b6000546001600160a01b03163314610d5b5760405162461bcd60e51b8152600401610c2f90612753565b601c8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260076020526040812054601754610dbe91611e47565b905090565b600080546001600160a01b03163314610dee5760405162461bcd60e51b8152600401610c2f90612753565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b158015610e3657600080fd5b505af1158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a919061263b565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610bfb918590610d21908661185b565b6000546001600160a01b03163314610ece5760405162461bcd60e51b8152600401610c2f90612753565b601a55565b6000546001600160a01b03163314610efd5760405162461bcd60e51b8152600401610c2f90612753565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b03163314610f505760405162461bcd60e51b8152600401610c2f90612753565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f8e57600080fd5b505afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc69190612533565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110469190612533565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561108c57600080fd5b505afa1580156110a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c49190612533565b91506001600160a01b03821661124857806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561110d57600080fd5b505afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111459190612533565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c59190612533565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561120d57600080fd5b505af1158015611221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112459190612533565b91505b601c80546001600160a01b03199081166001600160a01b038581169182178455601b8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146112e15760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b0381166000908152600d602052604090205460ff1615611323576001600160a01b03166000908152600d60205260409020805460ff19169055565b6001600160a01b0381166000908152600d60205260409020805460ff191660011790555b50565b6000546001600160a01b031633146113745760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113c95760405162461bcd60e51b8152600401610c2f90612753565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114155760405162461bcd60e51b8152600401610c2f90612753565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060048054610b6b90612853565b6000546001600160a01b0316331461149e5760405162461bcd60e51b8152600401610c2f90612753565b601082905560118190556114b2828261185b565b6015555050565b6000610bfb3384610d21856040518060600160405280602581526020016128f0602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611e0d565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610c2f90612753565b601c8054911515600160b01b0260ff60b01b19909216919091179055565b6000610d263384846119de565b6000546001600160a01b031633146115875760405162461bcd60e51b8152600401610c2f90612753565b600e829055600f81905561159b828261185b565b6014555050565b6000546001600160a01b031633146115cc5760405162461bcd60e51b8152600401610c2f90612753565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161990831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461164e5760405162461bcd60e51b8152600401610c2f90612753565b601855565b6000546001600160a01b0316331461167d5760405162461bcd60e51b8152600401610c2f90612753565b60128290556013819055611691828261185b565b6016555050565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117175760405162461bcd60e51b8152600401610c2f90612753565b601955565b6000546001600160a01b031633146117465760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b0381166117ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c2f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118305760405162461bcd60e51b8152600401610c2f90612753565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60008061186883856127e5565b905083811015610d2a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2f565b6001600160a01b03831661191c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c2f565b6001600160a01b03821661197d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c2f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611a445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c2f565b6001600160a01b038316611aa65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c2f565b6001600160a01b0384166000908152600d602052604090205460ff1615611b005760405162461bcd60e51b815260206004820152600e60248201526d1858d8dbdd5b9d081a5cc8189bdd60921b6044820152606401610c2f565b601c54600160a01b900460ff1615611b2457611b1d848484611e89565b9050610d2a565b6001600160a01b0384166000908152600b602052604090205460ff16158015611b6657506001600160a01b0383166000908152600b602052604090205460ff16155b15611bce57601854821115611bce5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c2f565b30600090815260076020526040902054601a5481108015908190611bfc5750601c54600160a01b900460ff16155b8015611c2157506001600160a01b0386166000908152600c602052604090205460ff16155b8015611c365750601c54600160a81b900460ff165b15611c5c57601c54600160b01b900460ff1615611c5357601a5491505b611c5c82611f6f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611cae918690611e0d565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611cfb57506001600160a01b03861660009081526009602052604090205460ff165b611d0f57611d0a878787612066565b611d11565b845b601c54909150600160b81b900460ff168015611d4657506001600160a01b0386166000908152600a602052604090205460ff16155b15611d8257601954611d7782611d71896001600160a01b031660009081526007602052604090205490565b9061185b565b1115611d8257600080fd5b6001600160a01b038616600090815260076020526040902054611da5908261185b565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611df99085815260200190565b60405180910390a360019350505050610d2a565b60008184841115611e315760405162461bcd60e51b8152600401610c2f9190612700565b506000611e3e848661283c565b95945050505050565b6000610d2a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e0d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611eda918490611e0d565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611f09908361185b565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f5d9086815260200190565b60405180910390a35060019392505050565b601c805460ff60a01b1916600160a01b179055601654601254600091611fa591600291611f9f918290879061216c565b906121eb565b90506000611fb38383611e47565b9050611fbe8161222d565b6012544790600090611fde90611fd59060026121eb565b60165490611e47565b905060006120006002611f9f84611f9f6012548861216c90919063ffffffff16565b9050600061200e8483611e47565b90508015612031576005546120319061010090046001600160a01b0316826123eb565b6000821180156120415750600086115b15612050576120508683612426565b5050601c805460ff60a01b191690555050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff16156120aa576120a36064611f9f6014548661216c90919063ffffffff16565b90506120e8565b6001600160a01b0384166000908152600c602052604090205460ff16156120e8576120e56064611f9f6015548661216c90919063ffffffff16565b90505b80156121625730600090815260076020526040902054612108908261185b565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121599085815260200190565b60405180910390a35b611e3e8382611e47565b60008261217b57506000610bff565b6000612187838561281d565b90508261219485836127fd565b14610d2a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c2f565b6000610d2a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061227057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156122c457600080fd5b505afa1580156122d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fc9190612533565b8160018151811061231d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5461234391309116846118ba565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061237c9085906000908690309042906004016127a9565b600060405180830381600087803b15801561239657600080fd5b505af11580156123aa573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516123df929190612788565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612421573d6000803e3d6000fd5b505050565b601b5461243e9030906001600160a01b0316846118ba565b601b5460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156124a957600080fd5b505af11580156124bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124e29190612690565b5050505050565b6000818361250a5760405162461bcd60e51b8152600401610c2f9190612700565b506000611e3e84866127fd565b600060208284031215612528578081fd5b8135610d2a816128a4565b600060208284031215612544578081fd5b8151610d2a816128a4565b60008060408385031215612561578081fd5b823561256c816128a4565b9150602083013561257c816128a4565b809150509250929050565b60008060006060848603121561259b578081fd5b83356125a6816128a4565b925060208401356125b6816128a4565b929592945050506040919091013590565b600080604083850312156125d9578182fd5b82356125e4816128a4565b9150602083013561257c816128b9565b60008060408385031215612606578182fd5b8235612611816128a4565b946020939093013593505050565b600060208284031215612630578081fd5b8135610d2a816128b9565b60006020828403121561264c578081fd5b8151610d2a816128b9565b600060208284031215612668578081fd5b5035919050565b60008060408385031215612681578182fd5b50508035926020909101359150565b6000806000606084860312156126a4578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156126f55781516001600160a01b0316875295820195908201906001016126d0565b509495945050505050565b6000602080835283518082850152825b8181101561272c57858101830151858201604001528201612710565b8181111561273d5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006127a160408301846126bd565b949350505050565b85815284602082015260a0604082015260006127c860a08301866126bd565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156127f8576127f861288e565b500190565b60008261281857634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156128375761283761288e565b500290565b60008282101561284e5761284e61288e565b500390565b600181811c9082168061286757607f821691505b6020821081141561288857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461134757600080fd5b801515811461134757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f5691561c53cb64883f372cec7ee299392aeeffcd173a864944386dca7630d5c64736f6c63430008040033

Deployed Bytecode Sourcemap

14370:14687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17856:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19150:161;;;;;;;;;;-1:-1:-1;19150:161:0;;;;;:::i;:::-;;:::i;:::-;;;5981:14:1;;5974:22;5956:41;;5944:2;5929:18;19150:161:0;5911:92:1;19664:127:0;;;;;;;;;;-1:-1:-1;19664:127:0;;;;;:::i;:::-;;:::i;:::-;;15981:41;;;;;;;;;;-1:-1:-1;15981:41:0;;;;-1:-1:-1;;;;;15981:41:0;;;;;;-1:-1:-1;;;;;4340:32:1;;;4322:51;;4310:2;4295:18;15981:41:0;4277:102:1;18133:100:0;;;;;;;;;;-1:-1:-1;18213:12:0;;18133:100;;;10893:25:1;;;10881:2;10866:18;18133:100:0;10848:76:1;21472:135:0;;;;;;;;;;-1:-1:-1;21472:135:0;;;;;:::i;:::-;;:::i;23801:315::-;;;;;;;;;;-1:-1:-1;23801:315:0;;;;;:::i;:::-;;:::i;21350:114::-;;;;;;;;;;-1:-1:-1;21350:114:0;;;;;:::i;:::-;;:::i;14820:81::-;;;;;;;;;;;;;;;22451:128;;;;;;;;;;;;;:::i;18042:83::-;;;;;;;;;;-1:-1:-1;18108:9:0;;18042:83;;18108:9;;;;11995:36:1;;11983:2;11968:18;18042:83:0;11950:87:1;19799:174:0;;;;;;;;;;-1:-1:-1;19799:174:0;;;;;:::i;:::-;;:::i;18519:218::-;;;;;;;;;;-1:-1:-1;18519:218:0;;;;;:::i;:::-;;:::i;21725:124::-;;;;;;;;;;-1:-1:-1;21725:124:0;;;;;:::i;:::-;;:::i;15204:45::-;;;;;;;;;;-1:-1:-1;15204:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16092:40;;;;;;;;;;-1:-1:-1;16092:40:0;;;;-1:-1:-1;;;16092:40:0;;;;;;21857:139;;;;;;;;;;-1:-1:-1;21857:139:0;;;;;:::i;:::-;;:::i;15033:50::-;;;;;;;;;;-1:-1:-1;15033:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6483:90;;;;;;;;;;-1:-1:-1;6550:15:0;6483:90;;15485:34;;;;;;;;;;;;;;;;22721:802;;;;;;;;;;-1:-1:-1;22721:802:0;;;;;:::i;:::-;;:::i;28214:230::-;;;;;;;;;;-1:-1:-1;28214:230:0;;;;;:::i;:::-;;:::i;15526:34::-;;;;;;;;;;;;;;;;14718:93;;;;;;;;;;-1:-1:-1;14718:93:0;;;;-1:-1:-1;;;;;14718:93:0;;;18241:119;;;;;;;;;;-1:-1:-1;18241:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;18334:18:0;18307:7;18334:18;;;:9;:18;;;;;;;18241:119;15774:59;;;;;;;;;;;;;;;;15840;;;;;;;;;;;;;;;;15612:37;;;;;;;;;;;;;;;;19981:129;;;;;;;;;;-1:-1:-1;19981:129:0;;;;;:::i;:::-;;:::i;15397:36::-;;;;;;;;;;;;;;;;15149:48;;;;;;;;;;-1:-1:-1;15149:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22004:127;;;;;;;;;;-1:-1:-1;22004:127:0;;;;;:::i;:::-;;:::i;5782:79::-;;;;;;;;;;-1:-1:-1;5820:7:0;5847:6;-1:-1:-1;;;;;5847:6:0;5782:79;;5996:227;;;;;;;;;;;;;:::i;17947:87::-;;;;;;;;;;;;;:::i;20665:266::-;;;;;;;;;;-1:-1:-1;20665:266:0;;;;;:::i;:::-;;:::i;19022:120::-;;;;;;;;;;-1:-1:-1;19111:23:0;;19022:120;;15656:43;;;;;;;;;;;;;;;;18745:269;;;;;;;;;;-1:-1:-1;18745:269:0;;;;;:::i;:::-;;:::i;22318:125::-;;;;;;;;;;-1:-1:-1;22318:125:0;;;;;:::i;:::-;;:::i;23624:169::-;;;;;;;;;;-1:-1:-1;23624:169:0;;;;;:::i;:::-;;:::i;20396:261::-;;;;;;;;;;-1:-1:-1;20396:261:0;;;;;:::i;:::-;;:::i;15256:46::-;;;;;;;;;;-1:-1:-1;15256:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22139:171;;;;;;;;;;-1:-1:-1;22139:171:0;;;;;:::i;:::-;;:::i;15353:35::-;;;;;;;;;;;;;;;;16029:26;;;;;;;;;;-1:-1:-1;16029:26:0;;;;-1:-1:-1;;;;;16029:26:0;;;15440:36;;;;;;;;;;;;;;;;15090:52;;;;;;;;;;-1:-1:-1;15090:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14612:99;;;;;;;;;;-1:-1:-1;14612:99:0;;;;;;;-1:-1:-1;;;;;14612:99:0;;;16139:45;;;;;;;;;;-1:-1:-1;16139:45:0;;;;-1:-1:-1;;;16139:45:0;;;;;;15311:35;;;;;;;;;;;;;;;;18368:143;;;;;;;;;;-1:-1:-1;18368:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18476:18:0;;;18449:7;18476:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18368:143;21231:111;;;;;;;;;;-1:-1:-1;21231:111:0;;;;;:::i;:::-;;:::i;20939:284::-;;;;;;;;;;-1:-1:-1;20939:284:0;;;;;:::i;:::-;;:::i;20253:135::-;;;;;;;;;;-1:-1:-1;20253:135:0;;;;;:::i;:::-;;:::i;15569:36::-;;;;;;;;;;;;;;;;21615:102;;;;;;;;;;-1:-1:-1;21615:102:0;;;;;:::i;:::-;;:::i;6231:244::-;;;;;;;;;;-1:-1:-1;6231:244:0;;;;;:::i;:::-;;:::i;20118:127::-;;;;;;;;;;-1:-1:-1;20118:127:0;;;;;:::i;:::-;;:::i;16191:35::-;;;;;;;;;;-1:-1:-1;16191:35:0;;;;-1:-1:-1;;;16191:35:0;;;;;;17856:83;17893:13;17926:5;17919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17856:83;:::o;19150:161::-;19225:4;19242:39;198:10;19265:7;19274:6;19242:8;:39::i;:::-;-1:-1:-1;19299:4:0;19150:161;;;;;:::o;19664:127::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;;;;;;;;;19740:43:::1;::::0;-1:-1:-1;;;;;19740:20:0;::::1;::::0;19761:21:::1;19740:43:::0;::::1;;;::::0;::::1;::::0;;;19761:21;19740:20;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;19664:127:::0;:::o;21472:135::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21563:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;21563:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21472:135::o;23801:315::-;23899:4;23918:36;23928:6;23936:9;23947:6;23918:9;:36::i;:::-;-1:-1:-1;23965:121:0;23974:6;198:10;23996:89;24034:6;23996:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23996:19:0;;;;;;:11;:19;;;;;;;;198:10;23996:33;;;;;;;;;;:37;:89::i;:::-;23965:8;:121::i;:::-;-1:-1:-1;24104:4:0;23801:315;;;;;;:::o;21350:114::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21429:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;21429:27:0::1;-1:-1:-1::0;;;;21429:27:0;;::::1;::::0;;;::::1;::::0;;21350:114::o;22451:128::-;22558:11;-1:-1:-1;;;;;18334:18:0;22504:7;18334:18;;;:9;:18;;;;;;22531:12;;:40;;:16;:40::i;:::-;22524:47;;22451:128;:::o;19799:174::-;19884:12;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;19916:49:::1;::::0;-1:-1:-1;;;19916:49:0;;19946:10:::1;19916:49;::::0;::::1;5091:51:1::0;5158:18;;;5151:34;;;-1:-1:-1;;;;;19916:29:0;::::1;::::0;::::1;::::0;5064:18:1;;19916:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18519:218::-:0;198:10;18607:4;18656:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18656:34:0;;;;;;;;;;18607:4;;18624:83;;18647:7;;18656:50;;18695:10;18656:38;:50::i;21725:124::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21807:23:::1;:34:::0;21725:124::o;21857:139::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21944:22:::1;:44:::0;;-1:-1:-1;;;;;21944:44:0;;::::1;;;-1:-1:-1::0;;;;;;21944:44:0;;::::1;::::0;;;::::1;::::0;;21857:139::o;22721:802::-;22801:22;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;22838:35:::1;22895:16;22838:74;;22960:16;-1:-1:-1::0;;;;;22960:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22942:53:0::1;;23004:4;23011:16;-1:-1:-1::0;;;;;23011:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22942:93;::::0;-1:-1:-1;;;;;;22942:93:0::1;::::0;;;;;;-1:-1:-1;;;;;4838:15:1;;;22942:93:0::1;::::0;::::1;4820:34:1::0;4890:15;;4870:18;;;4863:43;4755:18;;22942:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22925:110:::0;-1:-1:-1;;;;;;23051:28:0;::::1;23048:221;;23165:16;-1:-1:-1::0;;;;;23165:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23147:70:0::1;;23226:4;23233:16;-1:-1:-1::0;;;;;23233:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23147:110;::::0;-1:-1:-1;;;;;;23147:110:0::1;::::0;;;;;;-1:-1:-1;;;;;4838:15:1;;;23147:110:0::1;::::0;::::1;4820:34:1::0;4890:15;;4870:18;;;4863:43;4755:18;;23147:110:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23130:127;;23048:221;23281:11;:28:::0;;-1:-1:-1;;;;;;23281:28:0;;::::1;-1:-1:-1::0;;;;;23281:28:0;;::::1;::::0;;::::1;::::0;;23343:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;23415:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;23415:48:0;;::::1;-1:-1:-1::0;23415:48:0;;::::1;::::0;;;23495:11;;;;::::1;23474:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;23281:28;23295:14;-1:-1:-1;22721:802:0:o;28214:230::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28288:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;;::::1;;28284:153;;;-1:-1:-1::0;;;;;28329:24:0::1;28356:5;28329:24:::0;;;:14:::1;:24;::::0;;;;:32;;-1:-1:-1;;28329:32:0::1;::::0;;28214:230::o;28284:153::-:1;-1:-1:-1::0;;;;;28394:24:0;::::1;;::::0;;;:14:::1;:24;::::0;;;;:31;;-1:-1:-1;;28394:31:0::1;28421:4;28394:31;::::0;;28284:153:::1;28214:230:::0;:::o;19981:129::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20070:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;20070:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19981:129::o;22004:127::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;22085:16:::1;:38:::0;;-1:-1:-1;;;;;;22085:38:0::1;-1:-1:-1::0;;;;;22085:38:0;;;::::1;::::0;;;::::1;::::0;;22004:127::o;5996:227::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;6084:6:::1;::::0;;6063:81:::1;::::0;6100:42:::1;::::0;-1:-1:-1;;;;;6084:6:0;;::::1;::::0;6063:81:::1;::::0;::::1;6155:6;:60:::0;;-1:-1:-1;;;;;;6155:60:0::1;6172:42;6155:60;::::0;;5996:227::o;17947:87::-;17986:13;18019:7;18012:14;;;;;:::i;20665:266::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;20768:17:::1;:35:::0;;;20814:17:::1;:35:::0;;;20883:40:::1;20788:15:::0;20834;20883:21:::1;:40::i;:::-;20862:18;:61:::0;-1:-1:-1;;20665:266:0:o;18745:269::-;18838:4;18855:129;198:10;18878:7;18887:96;18926:15;18887:96;;;;;;;;;;;;;;;;;198:10;18887:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18887:34:0;;;;;;;;;;;;:38;:96::i;22318:125::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;22399:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;22399:36:0::1;-1:-1:-1::0;;;;22399:36:0;;::::1;::::0;;;::::1;::::0;;22318:125::o;23624:169::-;23702:4;23721:42;198:10;23745:9;23756:6;23721:9;:42::i;20396:261::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;20499:16:::1;:34:::0;;;20544:16:::1;:34:::0;;;20611:38:::1;20518:15:::0;20563;20611:20:::1;:38::i;:::-;20591:17;:58:::0;-1:-1:-1;;20396:261:0:o;22139:171::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;22216:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22216:32:0::1;-1:-1:-1::0;;;;22216:32:0;;::::1;;::::0;;22264:38:::1;::::0;::::1;::::0;::::1;::::0;22240:8;5981:14:1;5974:22;5956:41;;5944:2;5929:18;;5911:92;22264:38:0::1;;;;;;;;22139:171:::0;:::o;21231:111::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21308:12:::1;:26:::0;21231:111::o;20939:284::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21058:15:::1;:35:::0;;;21104:15:::1;:35:::0;;;21179:36:::1;21076:17:::0;21122;21179:19:::1;:36::i;:::-;21152:24;:63:::0;-1:-1:-1;;20939:284:0:o;20253:135::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20343:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;20343:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20253:135::o;21615:102::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;21687:10:::1;:22:::0;21615:102::o;6231:244::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6320:22:0;::::1;6312:73;;;::::0;-1:-1:-1;;;6312:73:0;;7800:2:1;6312:73:0::1;::::0;::::1;7782:21:1::0;7839:2;7819:18;;;7812:30;7878:34;7858:18;;;7851:62;-1:-1:-1;;;7929:18:1;;;7922:36;7975:19;;6312:73:0::1;7772:228:1::0;6312:73:0::1;6422:6;::::0;;6401:38:::1;::::0;-1:-1:-1;;;;;6401:38:0;;::::1;::::0;6422:6;::::1;::::0;6401:38:::1;::::0;::::1;6450:6;:17:::0;;-1:-1:-1;;;;;;6450:17:0::1;-1:-1:-1::0;;;;;6450:17:0;;;::::1;::::0;;;::::1;::::0;;6231:244::o;20118:127::-;5909:6;;-1:-1:-1;;;;;5909:6:0;198:10;5909:22;5901:67;;;;-1:-1:-1;;;5901:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20205:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;20205:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20118:127::o;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;8610:2:1;1276:46:0;;;8592:21:1;8649:2;8629:18;;;8622:30;8688:29;8668:18;;;8661:57;8735:18;;1276:46:0;8582:177:1;19319:337:0;-1:-1:-1;;;;;19412:19:0;;19404:68;;;;-1:-1:-1;;;19404:68:0;;10544:2:1;19404:68:0;;;10526:21:1;10583:2;10563:18;;;10556:30;10622:34;10602:18;;;10595:62;-1:-1:-1;;;10673:18:1;;;10666:34;10717:19;;19404:68:0;10516:226:1;19404:68:0;-1:-1:-1;;;;;19491:21:0;;19483:68;;;;-1:-1:-1;;;19483:68:0;;8207:2:1;19483:68:0;;;8189:21:1;8246:2;8226:18;;;8219:30;8285:34;8265:18;;;8258:62;-1:-1:-1;;;8336:18:1;;;8329:32;8378:19;;19483:68:0;8179:224:1;19483:68:0;-1:-1:-1;;;;;19564:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19616:32;;10893:25:1;;;19616:32:0;;10866:18:1;19616:32:0;;;;;;;19319:337;;;:::o;24124:1707::-;24211:4;-1:-1:-1;;;;;24238:20:0;;24230:70;;;;-1:-1:-1;;;24230:70:0;;10138:2:1;24230:70:0;;;10120:21:1;10177:2;10157:18;;;10150:30;10216:34;10196:18;;;10189:62;-1:-1:-1;;;10267:18:1;;;10260:35;10312:19;;24230:70:0;10110:227:1;24230:70:0;-1:-1:-1;;;;;24319:23:0;;24311:71;;;;-1:-1:-1;;;24311:71:0;;7053:2:1;24311:71:0;;;7035:21:1;7092:2;7072:18;;;7065:30;7131:34;7111:18;;;7104:62;-1:-1:-1;;;7182:18:1;;;7175:33;7225:19;;24311:71:0;7025:225:1;24311:71:0;-1:-1:-1;;;;;24402:22:0;;;;;;:14;:22;;;;;;;;24401:23;24393:50;;;;-1:-1:-1;;;24393:50:0;;7457:2:1;24393:50:0;;;7439:21:1;7496:2;7476:18;;;7469:30;-1:-1:-1;;;7515:18:1;;;7508:44;7569:18;;24393:50:0;7429:164:1;24393:50:0;24459:16;;-1:-1:-1;;;24459:16:0;;;;24456:1368;;;24508:41;24523:6;24531:9;24542:6;24508:14;:41::i;:::-;24501:48;;;;24456:1368;-1:-1:-1;;;;;24604:23:0;;;;;;:15;:23;;;;;;;;24603:24;:55;;;;-1:-1:-1;;;;;;24632:26:0;;;;;;:15;:26;;;;;;;;24631:27;24603:55;24600:170;;;24697:12;;24687:6;:22;;24679:75;;;;-1:-1:-1;;;24679:75:0;;8966:2:1;24679:75:0;;;8948:21:1;9005:2;8985:18;;;8978:30;9044:34;9024:18;;;9017:62;-1:-1:-1;;;9095:18:1;;;9088:38;9143:19;;24679:75:0;8938:230:1;24679:75:0;24835:4;24786:28;18334:18;;;:9;:18;;;;;;24911:23;;24887:47;;;;;;;24955:44;;-1:-1:-1;24983:16:0;;-1:-1:-1;;;24983:16:0;;;;24982:17;24955:44;:69;;;;-1:-1:-1;;;;;;25004:20:0;;;;;;:12;:20;;;;;;;;25003:21;24955:69;:94;;;;-1:-1:-1;25028:21:0;;-1:-1:-1;;;25028:21:0;;;;24955:94;24951:300;;;25086:25;;-1:-1:-1;;;25086:25:0;;;;25083:97;;;25157:23;;25134:46;;25083:97;25199:36;25214:20;25199:14;:36::i;:::-;25287:53;;;;;;;;;;;-1:-1:-1;;;25287:53:0;;;;;;;;-1:-1:-1;;;;;25287:17:0;;-1:-1:-1;25287:17:0;;;:9;:17;;;;;;;;:53;;25309:6;;25287:21;:53::i;:::-;-1:-1:-1;;;;;25267:17:0;;;;;;:9;:17;;;;;;;;:73;;;;25380:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;25409:28:0;;;;;;:17;:28;;;;;;;;25380:57;25379:118;;25463:34;25471:6;25479:9;25490:6;25463:7;:34::i;:::-;25379:118;;;25454:6;25379:118;25517:16;;25357:140;;-1:-1:-1;;;;25517:16:0;;;;:51;;;;-1:-1:-1;;;;;;25538:30:0;;;;;;:19;:30;;;;;;;;25537:31;25517:51;25514:133;;;25636:10;;25595:37;25620:11;25595:20;25605:9;-1:-1:-1;;;;;18334:18:0;18307:7;18334:18;;;:9;:18;;;;;;;18241:119;25595:20;:24;;:37::i;:::-;:51;;25587:60;;;;;;-1:-1:-1;;;;;25687:20:0;;;;;;:9;:20;;;;;;:37;;25712:11;25687:24;:37::i;:::-;-1:-1:-1;;;;;25664:20:0;;;;;;;:9;:20;;;;;;;:60;;;;25746:40;;;;;;;;;;25774:11;10893:25:1;;10881:2;10866:18;;10848:76;25746:40:0;;;;;;;;25808:4;25801:11;;;;;;;1503:192;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;25839:330::-;25969:53;;;;;;;;;;;-1:-1:-1;;;25969:53:0;;;;;;;;-1:-1:-1;;;;;25969:17:0;;25932:4;25969:17;;;:9;:17;;;;;;;:53;;25991:6;;25969:21;:53::i;:::-;-1:-1:-1;;;;;25949:17:0;;;;;;;:9;:17;;;;;;:73;;;;26056:20;;;;;;;:32;;26081:6;26056:24;:32::i;:::-;-1:-1:-1;;;;;26033:20:0;;;;;;;:9;:20;;;;;;;:55;;;;26104:35;;;;;;;;;;26132:6;10893:25:1;;10881:2;10866:18;;10848:76;26104:35:0;;;;;;;;-1:-1:-1;26157:4:0;25839:330;;;;;:::o;26177:829::-;16637:16;:23;;-1:-1:-1;;;;16637:23:0;-1:-1:-1;;;16637:23:0;;;26306:24:::1;::::0;26285:15:::1;::::0;16637:23;;26273:65:::1;::::0;26336:1:::1;::::0;26273:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;26251:87:::0;-1:-1:-1;26349:21:0::1;26373:24;:7:::0;26251:87;26373:11:::1;:24::i;:::-;26349:48;;26410:31;26427:13;26410:16;:31::i;:::-;26562:15;::::0;26477:21:::1;::::0;26452:22:::1;::::0;26533:52:::1;::::0;26562:22:::1;::::0;26582:1:::1;26562:19;:22::i;:::-;26533:24;::::0;;:28:::1;:52::i;:::-;26511:74;;26598:26;26627:59;26684:1;26627:52;26667:11;26627:35;26646:15;;26627:14;:18;;:35;;;;:::i;:59::-;26598:88:::0;-1:-1:-1;26697:26:0::1;26726:38;:14:::0;26598:88;26726:18:::1;:38::i;:::-;26697:67:::0;-1:-1:-1;26780:22:0;;26777:104:::1;;26838:22;::::0;26817:64:::1;::::0;26838:22:::1;::::0;::::1;-1:-1:-1::0;;;;;26838:22:0::1;26862:18:::0;26817:20:::1;:64::i;:::-;26918:1;26897:18;:22;:41;;;;;26937:1;26923:11;:15;26897:41;26894:104;;;26953:45;26966:11;26979:18;26953:12;:45::i;:::-;-1:-1:-1::0;;16683:16:0;:24;;-1:-1:-1;;;;16683:24:0;;;-1:-1:-1;;;;;26177:829:0:o;28454:598::-;-1:-1:-1;;;;;28599:20:0;;28540:7;28599:20;;;:12;:20;;;;;;28540:7;;28599:20;;28596:223;;;28648:38;28682:3;28648:29;28659:17;;28648:6;:10;;:29;;;;:::i;:38::-;28636:50;;28596:223;;;-1:-1:-1;;;;;28716:23:0;;;;;;:12;:23;;;;;;;;28713:106;;;28768:39;28803:3;28768:30;28779:18;;28768:6;:10;;:30;;;;:::i;:39::-;28756:51;;28713:106;28834:13;;28831:173;;28909:4;28891:24;;;;:9;:24;;;;;;:39;;28920:9;28891:28;:39::i;:::-;28882:4;28864:24;;;;:9;:24;;;;;;;:66;;;;28950:42;;-1:-1:-1;;;;;28950:42:0;;;;;;;28982:9;10893:25:1;;10881:2;10866:18;;10848:76;28950:42:0;;;;;;;;28831:173;29023:21;:6;29034:9;29023:10;:21::i;1703:250::-;1761:7;1785:6;1781:47;;-1:-1:-1;1815:1:0;1808:8;;1781:47;1840:9;1852:5;1856:1;1852;:5;:::i;:::-;1840:17;-1:-1:-1;1885:1:0;1876:5;1880:1;1840:17;1876:5;:::i;:::-;:10;1868:56;;;;-1:-1:-1;;;1868:56:0;;9375:2:1;1868:56:0;;;9357:21:1;9414:2;9394:18;;;9387:30;9453:34;9433:18;;;9426:62;-1:-1:-1;;;9504:18:1;;;9497:31;9545:19;;1868:56:0;9347:223:1;1961:132:0;2019:7;2046:39;2050:1;2053;2046:39;;;;;;;;;;;;;;;;;:3;:39::i;27014:658::-;27164:16;;;27178:1;27164:16;;;;;;;;27140:21;;27164:16;;;;;;;;;;-1:-1:-1;27164:16:0;27140:40;;27209:4;27191;27196:1;27191:7;;;;;;-1:-1:-1;;;27191:7:0;;;;;;;;;-1:-1:-1;;;;;27191:23:0;;;:7;;;;;;;;;;:23;;;;27235:15;;:22;;;-1:-1:-1;;;27235:22:0;;;;:15;;;;;:20;;:22;;;;;27191:7;;27235:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27225:4;27230:1;27225:7;;;;;;-1:-1:-1;;;27225:7:0;;;;;;;;;-1:-1:-1;;;;;27225:32:0;;;:7;;;;;;;;;:32;27302:15;;27270:62;;27287:4;;27302:15;27320:11;27270:8;:62::i;:::-;27371:15;;:240;;-1:-1:-1;;;27371:240:0;;-1:-1:-1;;;;;27371:15:0;;;;:66;;:240;;27452:11;;27371:15;;27522:4;;27549;;27585:15;;27371:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27629:35;27646:11;27659:4;27629:35;;;;;;;:::i;:::-;;;;;;;;27014:658;;:::o;22587:126::-;22679:26;;-1:-1:-1;;;;;22679:18:0;;;:26;;;;;22698:6;;22679:26;;;;22698:6;22679:18;:26;;;;;;;;;;;;;;;;;;;;;22587:126;;:::o;27680:522::-;27860:15;;27828:62;;27845:4;;-1:-1:-1;;;;;27860:15:0;27878:11;27828:8;:62::i;:::-;27933:15;;28137:16;;27933:261;;-1:-1:-1;;;27933:261:0;;28005:4;27933:261;;;5545:34:1;5595:18;;;5588:34;;;27933:15:0;5638:18:1;;;5631:34;;;5681:18;;;5674:34;-1:-1:-1;;;;;28137:16:0;;;5724:19:1;;;5717:44;28168:15:0;5777:19:1;;;5770:35;27933:15:0;;;:31;;27972:9;;5479:19:1;;27933:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27680:522;;:::o;2101:278::-;2187:7;2222:12;2215:5;2207:28;;;;-1:-1:-1;;;2207:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2246:9:0;2258:5;2262:1;2258;:5;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;812:398::-;880:6;888;941:2;929:9;920:7;916:23;912:32;909:2;;;962:6;954;947:22;909:2;1006:9;993:23;1025:31;1050:5;1025:31;:::i;:::-;1075:5;-1:-1:-1;1132:2:1;1117:18;;1104:32;1145:33;1104:32;1145:33;:::i;:::-;1197:7;1187:17;;;899:311;;;;;:::o;1215:466::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:2;;;1382:6;1374;1367:22;1329:2;1426:9;1413:23;1445:31;1470:5;1445:31;:::i;:::-;1495:5;-1:-1:-1;1552:2:1;1537:18;;1524:32;1565:33;1524:32;1565:33;:::i;:::-;1319:362;;1617:7;;-1:-1:-1;;;1671:2:1;1656:18;;;;1643:32;;1319:362::o;1686:392::-;1751:6;1759;1812:2;1800:9;1791:7;1787:23;1783:32;1780:2;;;1833:6;1825;1818:22;1780:2;1877:9;1864:23;1896:31;1921:5;1896:31;:::i;:::-;1946:5;-1:-1:-1;2003:2:1;1988:18;;1975:32;2016:30;1975:32;2016:30;:::i;2083:325::-;2151:6;2159;2212:2;2200:9;2191:7;2187:23;2183:32;2180:2;;;2233:6;2225;2218:22;2180:2;2277:9;2264:23;2296:31;2321:5;2296:31;:::i;:::-;2346:5;2398:2;2383:18;;;;2370:32;;-1:-1:-1;;;2170:238:1:o;2413:251::-;2469:6;2522:2;2510:9;2501:7;2497:23;2493:32;2490:2;;;2543:6;2535;2528:22;2490:2;2587:9;2574:23;2606:28;2628:5;2606:28;:::i;2669:255::-;2736:6;2789:2;2777:9;2768:7;2764:23;2760:32;2757:2;;;2810:6;2802;2795:22;2757:2;2847:9;2841:16;2866:28;2888:5;2866:28;:::i;2929:190::-;2988:6;3041:2;3029:9;3020:7;3016:23;3012:32;3009:2;;;3062:6;3054;3047:22;3009:2;-1:-1:-1;3090:23:1;;2999:120;-1:-1:-1;2999:120:1:o;3124:258::-;3192:6;3200;3253:2;3241:9;3232:7;3228:23;3224:32;3221:2;;;3274:6;3266;3259:22;3221:2;-1:-1:-1;;3302:23:1;;;3372:2;3357:18;;;3344:32;;-1:-1:-1;3211:171:1:o;3387:316::-;3475:6;3483;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:2;;;3565:6;3557;3550:22;3512:2;3599:9;3593:16;3583:26;;3649:2;3638:9;3634:18;3628:25;3618:35;;3693:2;3682:9;3678:18;3672:25;3662:35;;3502:201;;;;;:::o;3708:463::-;3761:3;3799:5;3793:12;3826:6;3821:3;3814:19;3852:4;3881:2;3876:3;3872:12;3865:19;;3918:2;3911:5;3907:14;3939:3;3951:195;3965:6;3962:1;3959:13;3951:195;;;4030:13;;-1:-1:-1;;;;;4026:39:1;4014:52;;4086:12;;;;4121:15;;;;4062:1;3980:9;3951:195;;;-1:-1:-1;4162:3:1;;3769:402;-1:-1:-1;;;;;3769:402:1:o;6243:603::-;6355:4;6384:2;6413;6402:9;6395:21;6445:6;6439:13;6488:6;6483:2;6472:9;6468:18;6461:34;6513:4;6526:140;6540:6;6537:1;6534:13;6526:140;;;6635:14;;;6631:23;;6625:30;6601:17;;;6620:2;6597:26;6590:66;6555:10;;6526:140;;;6684:6;6681:1;6678:13;6675:2;;;6754:4;6749:2;6740:6;6729:9;6725:22;6721:31;6714:45;6675:2;-1:-1:-1;6830:2:1;6809:15;-1:-1:-1;;6805:29:1;6790:45;;;;6837:2;6786:54;;6364:482;-1:-1:-1;;;6364:482:1:o;9575:356::-;9777:2;9759:21;;;9796:18;;;9789:30;9855:34;9850:2;9835:18;;9828:62;9922:2;9907:18;;9749:182::o;10929:332::-;11136:6;11125:9;11118:25;11179:2;11174;11163:9;11159:18;11152:30;11099:4;11199:56;11251:2;11240:9;11236:18;11228:6;11199:56;:::i;:::-;11191:64;11108:153;-1:-1:-1;;;;11108:153:1:o;11266:582::-;11565:6;11554:9;11547:25;11608:6;11603:2;11592:9;11588:18;11581:34;11651:3;11646:2;11635:9;11631:18;11624:31;11528:4;11672:57;11724:3;11713:9;11709:19;11701:6;11672:57;:::i;:::-;-1:-1:-1;;;;;11765:32:1;;;;11760:2;11745:18;;11738:60;-1:-1:-1;11829:3:1;11814:19;11807:35;11664:65;11537:311;-1:-1:-1;;;11537:311:1:o;12042:128::-;12082:3;12113:1;12109:6;12106:1;12103:13;12100:2;;;12119:18;;:::i;:::-;-1:-1:-1;12155:9:1;;12090:80::o;12175:217::-;12215:1;12241;12231:2;;-1:-1:-1;;;12266:31:1;;12320:4;12317:1;12310:15;12348:4;12273:1;12338:15;12231:2;-1:-1:-1;12377:9:1;;12221:171::o;12397:168::-;12437:7;12503:1;12499;12495:6;12491:14;12488:1;12485:21;12480:1;12473:9;12466:17;12462:45;12459:2;;;12510:18;;:::i;:::-;-1:-1:-1;12550:9:1;;12449:116::o;12570:125::-;12610:4;12638:1;12635;12632:8;12629:2;;;12643:18;;:::i;:::-;-1:-1:-1;12680:9:1;;12619:76::o;12700:380::-;12779:1;12775:12;;;;12822;;;12843:2;;12897:4;12889:6;12885:17;12875:27;;12843:2;12950;12942:6;12939:14;12919:18;12916:38;12913:2;;;12996:10;12991:3;12987:20;12984:1;12977:31;13031:4;13028:1;13021:15;13059:4;13056:1;13049:15;12913:2;;12755:325;;;:::o;13085:127::-;13146:10;13141:3;13137:20;13134:1;13127:31;13177:4;13174:1;13167:15;13201:4;13198:1;13191:15;13217:131;-1:-1:-1;;;;;13292:31:1;;13282:42;;13272:2;;13338:1;13335;13328:12;13353:118;13439:5;13432:13;13425:21;13418:5;13415:32;13405:2;;13461:1;13458;13451:12

Swarm Source

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