ETH Price: $2,976.01 (-1.47%)
 

Overview

Max Total Supply

10,000,000,000 XAIC

Holders

2

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
XAIC

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-12-12
*/

/*───────────────────────────────────┐
  Name: AI CONTROL
  Symbol: XAIC
  Decimals: 18
  Total supply: 10B
  Network: ETH

  Developed by coinsult.net
    ____      _                 _ _   
   / ___|___ (_)_ __  ___ _   _| | |_ 
  | |   / _ \| | '_ \/ __| | | | | __|
  | |__| (_) | | | | \__ \ |_| | | |_ 
   \____\___/|_|_| |_|___/\__,_|_|\__|

  t.me/coinsult_tg
─────────────────────────────────────┘

 SPDX-License-Identifier: MIT */

pragma solidity 0.8.19;

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract XAIC is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    string  public creator;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 public  treasuryFeeOnBuy;
    uint256 public  treasuryFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 public  walletToWalletTransferFee;

    address public  marketingWallet;
    address public  treasuryWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event TreasuryWalletChanged(address treasuryWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event TradingEnabled();

    constructor () ERC20("AI CONTROL", "XAIC") 
    {   
        address router;
        address pinkLock;
        
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
            pinkLock = 0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE; // BSC PinkLock
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
            pinkLock = 0x5E5b9bE5fd939c578ABE5800a90C566eeEbA44a5; // BSC Testnet PinkLock
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
            pinkLock = 0x71B5759d73262FBb223956913ecF4ecC51057641; // ETH PinkLock
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        creator = "coinsult.net";

        liquidityFeeOnBuy  = 1;
        liquidityFeeOnSell = 1;

        marketingFeeOnBuy  = 2;
        marketingFeeOnSell = 2;

        treasuryFeeOnBuy = 2;
        treasuryFeeOnSell = 2;

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy + treasuryFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell + treasuryFeeOnSell;

        walletToWalletTransferFee = 5;

        marketingWallet = 0xD7DE72F21f3d55D6B1fB15997187d69654A77A70;
        treasuryWallet = 0x31c7a463aF97eb9C3eFf93F67b457eB1B01C9999;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        _isExcludedFromMaxTxLimit[treasuryWallet] = true;
        _isExcludedFromMaxTxLimit[pinkLock] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[pinkLock] = true;

        _mint(owner(), 10e9 * (10 ** decimals()));
        swapTokensAtAmount = totalSupply() / 5_000;
	
        maxTransactionAmountBuy     = totalSupply() * 5 / 1000;
        maxTransactionAmountSell    = totalSupply() * 5 / 1000;
	
        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateBuyFees(uint256 _liquidityFeeOnBuy, uint256 _marketingFeeOnBuy, uint256 _treasuryFeeOnBuy) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;
        treasuryFeeOnBuy = _treasuryFeeOnBuy;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy + treasuryFeeOnBuy;

        require(_totalFeesOnBuy <= 5, "Total Fees cannot exceed the maximum");

        emit UpdateBuyFees(liquidityFeeOnBuy, marketingFeeOnBuy);
    }

    function updateSellFees(uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnSell, uint256 _treasuryFeeOnSell) external onlyOwner {
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;
        treasuryFeeOnSell = _treasuryFeeOnSell;

        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell + treasuryFeeOnSell;

        require(_totalFeesOnSell <= 5, "Total Fees cannot exceed the maximum");

        emit UpdateSellFees(liquidityFeeOnSell, marketingFeeOnSell);
    }

    function updateWalletToWalletTransferFee(uint256 _walletToWalletTransferFee) external onlyOwner {
        require(_walletToWalletTransferFee <= 5, "Wallet to Wallet Transfer Fee cannot exceed the maximum");
        walletToWalletTransferFee = _walletToWalletTransferFee;

        emit UpdateWalletToWalletTransferFee(walletToWalletTransferFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    function changeTreasuryWallet(address _treasuryWallet) external onlyOwner{
        require(_treasuryWallet != treasuryWallet,"Treasury wallet is already that address");
        require(_treasuryWallet != address(0),"Treasury wallet cannot be the zero address");
        treasuryWallet = _treasuryWallet;

        emit TreasuryWalletChanged(treasuryWallet);
    }

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;

        emit TradingEnabled();
    }

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell + treasuryFeeOnSell + treasuryFeeOnBuy;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }
            
            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendMarketing(marketingTokens);
            }          

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = walletToWalletTransferFee;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        super._transfer(from, to, amount);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;
        uint256 marketing = newBalance / 2;

        payable(marketingWallet).sendValue(marketing);
        payable(treasuryWallet).sendValue(address(this).balance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","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":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"TreasuryWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","type":"event"},{"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","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"changeTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnBuy","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeOnSell","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletToWalletTransferFee","type":"uint256"}],"name":"updateWalletToWalletTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600a81526020016910524810d3d3951493d360b21b815250604051806040016040528060048152602001635841494360e01b8152508160039081620000639190620008f3565b506004620000728282620008f3565b5050506000620000876200063560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600080466038036200011457507310ed43c718714eb63d5aa57b78b54704e256024e905073407993575c91ce7643a4d4ccacc9a98c36ee1bbe6200019e565b4660610362000150575073d99d1c33f9fc3444f8101754abc46c52416550d19050735e5b9be5fd939c578abe5800a90c566eeeba44a56200019e565b4660011480620001605750466005145b15620001995750737a250d5630b4cf539739df2c5dacb4c659f2488d90507371b5759d73262fbb223956913ecf4ecc510576416200019e565b600080fd5b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620009bf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027e9190620009bf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f29190620009bf565b600680546001600160a01b038086166001600160a01b0319928316811790935560078054918516919092161790559091506200033390309060001962000639565b60408051808201909152600c81526b18dbda5b9cdd5b1d0b9b995d60a21b6020820152600990620003659082620008f3565b506001600a819055600b8190556002600c819055600d819055600e819055600f819055906200039690829062000a07565b620003a2919062000a07565b601055600f54600d54600b54620003ba919062000a07565b620003c6919062000a07565b6011556005601255601380546001600160a01b031990811673d7de72f21f3d55d6b1fb15997187d69654a77a7017909155601480549091167331c7a463af97eb9c3eff93f67b457eb1b01c99991790556018805460ff19166001908117909155601760006200043d6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260179093528183208054851660019081179091557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b03038054861682179055601354821684528284208054861682179055601454821684528284208054861682179055908716835290822080549093168117909255600890620004f76005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091553084528284208054861682179055908716835291208054909216179055620005b06200058b6005546001600160a01b031690565b620005996012600a62000b20565b620005aa906402540be40062000b31565b62000765565b611388620005bd60025490565b620005c9919062000b4b565b6015556103e8620005d960025490565b620005e690600562000b31565b620005f2919062000b4b565b6019556103e86200060260025490565b6200060f90600562000b31565b6200061b919062000b4b565b601a5550506016805462ffff00191690555062000b6e9050565b3390565b6001600160a01b038316620006a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000698565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007bd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000698565b8060026000828254620007d1919062000a07565b90915550506001600160a01b038216600090815260208190526040812080548392906200080090849062000a07565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200087a57607f821691505b6020821081036200089b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084a57600081815260208120601f850160051c81016020861015620008ca5750805b601f850160051c820191505b81811015620008eb57828155600101620008d6565b505050505050565b81516001600160401b038111156200090f576200090f6200084f565b620009278162000920845462000865565b84620008a1565b602080601f8311600181146200095f5760008415620009465750858301515b600019600386901b1c1916600185901b178555620008eb565b600085815260208120601f198616915b8281101562000990578886015182559484019460019091019084016200096f565b5085821015620009af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009d257600080fd5b81516001600160a01b0381168114620009ea57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000a1d5762000a1d620009f1565b92915050565b600181815b8085111562000a6457816000190482111562000a485762000a48620009f1565b8085161562000a5657918102915b93841c939080029062000a28565b509250929050565b60008262000a7d5750600162000a1d565b8162000a8c5750600062000a1d565b816001811462000aa5576002811462000ab05762000ad0565b600191505062000a1d565b60ff84111562000ac45762000ac4620009f1565b50506001821b62000a1d565b5060208310610133831016604e8410600b841016171562000af5575081810a62000a1d565b62000b01838362000a23565b806000190482111562000b185762000b18620009f1565b029392505050565b6000620009ea60ff84168362000a6c565b808202811582820484141762000a1d5762000a1d620009f1565b60008262000b6957634e487b7160e01b600052601260045260246000fd5b500490565b612bd38062000b7e6000396000f3fe60806040526004361061028c5760003560e01c806370a082311161015a578063afa4f3b2116100c1578063dc4c7dbc1161007a578063dc4c7dbc146107ab578063dd62ed3e146107c1578063e01af92c14610807578063e2f4560514610827578063f2fde38b1461083d578063f9d0831a1461085d57600080fd5b8063afa4f3b2146106f5578063b6f7f68114610715578063bb85c6d114610735578063c024666814610755578063c17b5b8c14610775578063cdd4bd791461079557600080fd5b8063880bcbc111610113578063880bcbc11461064d5780638a8c523c1461066d5780638da5cb5b1461068257806395d89b41146106a0578063a457c2d7146106b5578063a9059cbb146106d557600080fd5b806370a0823114610596578063715018a6146105cc57806375f0a874146105e15780637b3c83b1146106015780638095d56414610617578063824e46051461063757600080fd5b806339509351116101fe57806356a6cabf116101b757806356a6cabf146104f557806359136fa5146105155780635fc2e5961461052b57806364c98c44146105415780636ddd171314610561578063702509fd1461058057600080fd5b8063395093511461041a5780634626402b1461043a57806349bd5a5e1461045a5780634ada218b1461047a5780634fbee1931461049a578063537c1ac7146104d357600080fd5b806318160ddd1161025057806318160ddd1461036057806318d9ceae1461037557806323b872dd146103ae5780632ba86bf2146103ce5780632ce86fbf146103e8578063313ce567146103fe57600080fd5b80630105d0fd1461029857806302d05d3f146102c157806306fdde03146102e3578063095ea7b3146102f85780631694505e1461032857600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ae60195481565b6040519081526020015b60405180910390f35b3480156102cd57600080fd5b506102d661087d565b6040516102b891906125a8565b3480156102ef57600080fd5b506102d661090b565b34801561030457600080fd5b5061031861031336600461260b565b61099d565b60405190151581526020016102b8565b34801561033457600080fd5b50600654610348906001600160a01b031681565b6040516001600160a01b0390911681526020016102b8565b34801561036c57600080fd5b506002546102ae565b34801561038157600080fd5b50610318610390366004612637565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156103ba57600080fd5b506103186103c936600461265b565b6109b4565b3480156103da57600080fd5b506018546103189060ff1681565b3480156103f457600080fd5b506102ae600b5481565b34801561040a57600080fd5b50604051601281526020016102b8565b34801561042657600080fd5b5061031861043536600461260b565b610a6a565b34801561044657600080fd5b50601454610348906001600160a01b031681565b34801561046657600080fd5b50600754610348906001600160a01b031681565b34801561048657600080fd5b506016546103189062010000900460ff1681565b3480156104a657600080fd5b506103186104b5366004612637565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104df57600080fd5b506104f36104ee366004612637565b610aa6565b005b34801561050157600080fd5b506104f36105103660046126aa565b610bfc565b34801561052157600080fd5b506102ae601a5481565b34801561053757600080fd5b506102ae600c5481565b34801561054d57600080fd5b506104f361055c3660046126c7565b610ce0565b34801561056d57600080fd5b5060165461031890610100900460ff1681565b34801561058c57600080fd5b506102ae60125481565b3480156105a257600080fd5b506102ae6105b1366004612637565b6001600160a01b031660009081526020819052604090205490565b3480156105d857600080fd5b506104f3610db6565b3480156105ed57600080fd5b50601354610348906001600160a01b031681565b34801561060d57600080fd5b506102ae600a5481565b34801561062357600080fd5b506104f36106323660046126e0565b610e2a565b34801561064357600080fd5b506102ae600e5481565b34801561065957600080fd5b506104f361066836600461270c565b610ee8565b34801561067957600080fd5b506104f3611046565b34801561068e57600080fd5b506005546001600160a01b0316610348565b3480156106ac57600080fd5b506102d6611105565b3480156106c157600080fd5b506103186106d036600461260b565b611114565b3480156106e157600080fd5b506103186106f036600461260b565b6111ad565b34801561070157600080fd5b506104f36107103660046126c7565b6111ba565b34801561072157600080fd5b506104f3610730366004612745565b6112a4565b34801561074157600080fd5b506104f3610750366004612637565b611413565b34801561076157600080fd5b506104f361077036600461270c565b611564565b34801561078157600080fd5b506104f36107903660046126e0565b611669565b3480156107a157600080fd5b506102ae600f5481565b3480156107b757600080fd5b506102ae600d5481565b3480156107cd57600080fd5b506102ae6107dc366004612767565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081357600080fd5b506104f36108223660046126aa565b61171a565b34801561083357600080fd5b506102ae60155481565b34801561084957600080fd5b506104f3610858366004612637565b6117cb565b34801561086957600080fd5b506104f3610878366004612637565b6118b6565b6009805461088a90612795565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690612795565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b505050505081565b60606003805461091a90612795565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612795565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b60006109aa338484611a62565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610a545782811015610a475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a548533858403611a62565b610a5f858585611b86565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109aa918590610aa19086906127e5565b611a62565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a3e906127f8565b6014546001600160a01b0390811690821603610b3e5760405162461bcd60e51b815260206004820152602760248201527f54726561737572792077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b6064820152608401610a3e565b6001600160a01b038116610ba75760405162461bcd60e51b815260206004820152602a60248201527f54726561737572792077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b6064820152608401610a3e565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4906020015b60405180910390a150565b6005546001600160a01b03163314610c265760405162461bcd60e51b8152600401610a3e906127f8565b60185460ff16151581151503610c995760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610a3e565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610bf1565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610a3e906127f8565b6005811115610d815760405162461bcd60e51b815260206004820152603760248201527f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160448201527f6e6e6f742065786365656420746865206d6178696d756d0000000000000000006064820152608401610a3e565b60128190556040518181527f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b90602001610bf1565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610a3e906127f8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610a3e906127f8565b600a839055600c829055600e81905580610e6e83856127e5565b610e7891906127e5565b601081905560051015610e9d5760405162461bcd60e51b8152600401610a3e9061282d565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600a54600c54604051610edb929190918252602082015260400190565b60405180910390a1505050565b6005546001600160a01b03163314610f125760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503610f8e5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610a3e565b306001600160a01b03831603610fe65760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610a3e565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110705760405162461bcd60e51b8152600401610a3e906127f8565b60165462010000900460ff16156110c95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610a3e565b6016805462ffff001916620101001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b60606004805461091a90612795565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3e565b6111a33385858403611a62565b5060019392505050565b60006109aa338484611b86565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610a3e906127f8565b620f42406111f160025490565b6111fb9190612871565b811161126f5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610a3e565b60158190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610bf1565b6005546001600160a01b031633146112ce5760405162461bcd60e51b8152600401610a3e906127f8565b6103e86112dd6012600a612977565b6002546112ea9190612871565b6112f49190612871565b821015801561132857506103e861130d6012600a612977565b60025461131a9190612871565b6113249190612871565b8110155b61139a5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610a3e565b6113a66012600a612977565b6113b09083612986565b6019556113bf6012600a612977565b6113c99082612986565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611407928252602082015260400190565b60405180910390a15050565b6005546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610a3e906127f8565b6013546001600160a01b03908116908216036114ac5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610a3e565b6001600160a01b0381166115165760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610a3e565b601380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610bf1565b6005546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036116115760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610a3e565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910161103a565b6005546001600160a01b031633146116935760405162461bcd60e51b8152600401610a3e906127f8565b600b839055600d829055600f819055806116ad83856127e5565b6116b791906127e5565b6011819055600510156116dc5760405162461bcd60e51b8152600401610a3e9061282d565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600b54600d54604051610edb929190918252602082015260400190565b6005546001600160a01b031633146117445760405162461bcd60e51b8152600401610a3e906127f8565b801515601660019054906101000a900460ff161515036117b15760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610a3e565b601680549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146117f55760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03811661185a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118e05760405162461bcd60e51b8152600401610a3e906127f8565b306001600160a01b0382160361195e5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610a3e565b6001600160a01b03811661197a576119763347611f8b565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e7919061299d565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906129b6565b5050505b50565b6001600160a01b038316611ac45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3e565b6001600160a01b038216611b255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bac5760405162461bcd60e51b8152600401610a3e906129d3565b6001600160a01b038216611bd25760405162461bcd60e51b8152600401610a3e90612a18565b60165462010000900460ff1680611c0157506001600160a01b03831660009081526008602052604090205460ff165b80611c2457506001600160a01b03821660009081526008602052604090205460ff165b611c705760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a3e565b80600003611c8957611c848383600061203a565b505050565b60185460ff1615611d6b576007546001600160a01b0384811691161480611cbd57506007546001600160a01b038381169116145b8015611ce257506001600160a01b03831660009081526017602052604090205460ff16155b8015611d0757506001600160a01b03821660009081526017602052604090205460ff16155b15611d6b576007546001600160a01b0390811690841603611d4957601954811115611d445760405162461bcd60e51b8152600401610a3e90612a5b565b611d6b565b601a54811115611d6b5760405162461bcd60e51b8152600401610a3e90612a5b565b3060009081526020819052604090205460155481108015908190611d92575060165460ff16155b8015611dab57506007546001600160a01b038581169116145b8015611dc657506000601154601054611dc491906127e5565b115b8015611dd95750601654610100900460ff165b15611ea3576016805460ff19166001179055601154601054600091611dfd916127e5565b90506000600b54600a54611e1191906127e5565b90506000600e54600f54600d54600c54611e2b91906127e5565b611e3591906127e5565b611e3f91906127e5565b90508115611e6b57600083611e548488612986565b611e5e9190612871565b9050611e698161218e565b505b8015611e9557600083611e7e8388612986565b611e889190612871565b9050611e93816123d9565b505b50506016805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff1680611ee257506001600160a01b03851660009081526008602052604090205460ff165b80611eef575060165460ff165b15611efc57506000611f3f565b6007546001600160a01b0390811690871603611f1b5750601054611f3f565b6007546001600160a01b0390811690861603611f3a5750601154611f3f565b506012545b8015611f785760006064611f538387612986565b611f5d9190612871565b9050611f698186612ab8565b9450611f7687308361203a565b505b611f8386868661203a565b505050505050565b600081471015611fdd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a3e565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461202a576040519150601f19603f3d011682016040523d82523d6000602084013e61202f565b606091505b509095945050505050565b6001600160a01b0383166120605760405162461bcd60e51b8152600401610a3e906129d3565b6001600160a01b0382166120865760405162461bcd60e51b8152600401610a3e90612a18565b6001600160a01b038316600090815260208190526040902054818110156120fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a3e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121359084906127e5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218191815260200190565b60405180910390a3611a5b565b600061219b600283612871565b905060006121a98284612ab8565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106121e3576121e3612acb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561223c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122609190612ae1565b8160018151811061227357612273612acb565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906122b9908790600090869030904290600401612afe565b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b50505050600082476122f99190612ab8565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612368573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061238d9190612b6f565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061241257612412612acb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561246b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248f9190612ae1565b816001815181106124a2576124a2612acb565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906124e8908690600090869030904290600401612afe565b600060405180830381600087803b15801561250257600080fd5b505af1158015612516573d6000803e3d6000fd5b50505050600082476125289190612ab8565b90506000612537600283612871565b601354909150612550906001600160a01b031682611f8b565b50601454612567906001600160a01b031647611f8b565b5060408051868152602081018490527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a15050505050565b600060208083528351808285015260005b818110156125d5578581018301518582016040015282016125b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a5f57600080fd5b6000806040838503121561261e57600080fd5b8235612629816125f6565b946020939093013593505050565b60006020828403121561264957600080fd5b8135612654816125f6565b9392505050565b60008060006060848603121561267057600080fd5b833561267b816125f6565b9250602084013561268b816125f6565b929592945050506040919091013590565b8015158114611a5f57600080fd5b6000602082840312156126bc57600080fd5b81356126548161269c565b6000602082840312156126d957600080fd5b5035919050565b6000806000606084860312156126f557600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561271f57600080fd5b823561272a816125f6565b9150602083013561273a8161269c565b809150509250929050565b6000806040838503121561275857600080fd5b50508035926020909101359150565b6000806040838503121561277a57600080fd5b8235612785816125f6565b9150602083013561273a816125f6565b600181811c908216806127a957607f821691505b6020821081036127c957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156109ae576109ae6127cf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b60008261288e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156128ce5781600019048211156128b4576128b46127cf565b808516156128c157918102915b93841c9390800290612898565b509250929050565b6000826128e5575060016109ae565b816128f2575060006109ae565b816001811461290857600281146129125761292e565b60019150506109ae565b60ff841115612923576129236127cf565b50506001821b6109ae565b5060208310610133831016604e8410600b8410161715612951575081810a6109ae565b61295b8383612893565b806000190482111561296f5761296f6127cf565b029392505050565b600061265460ff8416836128d6565b80820281158282048414176109ae576109ae6127cf565b6000602082840312156129af57600080fd5b5051919050565b6000602082840312156129c857600080fd5b81516126548161269c565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b818103818111156109ae576109ae6127cf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612af357600080fd5b8151612654816125f6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b4e5784516001600160a01b031683529383019391830191600101612b29565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b8457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204e1ee9859a726c283a83909fdc5da6d3c17582385d6a23cd3b22d4c9bbaa684764736f6c63430008130033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806370a082311161015a578063afa4f3b2116100c1578063dc4c7dbc1161007a578063dc4c7dbc146107ab578063dd62ed3e146107c1578063e01af92c14610807578063e2f4560514610827578063f2fde38b1461083d578063f9d0831a1461085d57600080fd5b8063afa4f3b2146106f5578063b6f7f68114610715578063bb85c6d114610735578063c024666814610755578063c17b5b8c14610775578063cdd4bd791461079557600080fd5b8063880bcbc111610113578063880bcbc11461064d5780638a8c523c1461066d5780638da5cb5b1461068257806395d89b41146106a0578063a457c2d7146106b5578063a9059cbb146106d557600080fd5b806370a0823114610596578063715018a6146105cc57806375f0a874146105e15780637b3c83b1146106015780638095d56414610617578063824e46051461063757600080fd5b806339509351116101fe57806356a6cabf116101b757806356a6cabf146104f557806359136fa5146105155780635fc2e5961461052b57806364c98c44146105415780636ddd171314610561578063702509fd1461058057600080fd5b8063395093511461041a5780634626402b1461043a57806349bd5a5e1461045a5780634ada218b1461047a5780634fbee1931461049a578063537c1ac7146104d357600080fd5b806318160ddd1161025057806318160ddd1461036057806318d9ceae1461037557806323b872dd146103ae5780632ba86bf2146103ce5780632ce86fbf146103e8578063313ce567146103fe57600080fd5b80630105d0fd1461029857806302d05d3f146102c157806306fdde03146102e3578063095ea7b3146102f85780631694505e1461032857600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ae60195481565b6040519081526020015b60405180910390f35b3480156102cd57600080fd5b506102d661087d565b6040516102b891906125a8565b3480156102ef57600080fd5b506102d661090b565b34801561030457600080fd5b5061031861031336600461260b565b61099d565b60405190151581526020016102b8565b34801561033457600080fd5b50600654610348906001600160a01b031681565b6040516001600160a01b0390911681526020016102b8565b34801561036c57600080fd5b506002546102ae565b34801561038157600080fd5b50610318610390366004612637565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156103ba57600080fd5b506103186103c936600461265b565b6109b4565b3480156103da57600080fd5b506018546103189060ff1681565b3480156103f457600080fd5b506102ae600b5481565b34801561040a57600080fd5b50604051601281526020016102b8565b34801561042657600080fd5b5061031861043536600461260b565b610a6a565b34801561044657600080fd5b50601454610348906001600160a01b031681565b34801561046657600080fd5b50600754610348906001600160a01b031681565b34801561048657600080fd5b506016546103189062010000900460ff1681565b3480156104a657600080fd5b506103186104b5366004612637565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156104df57600080fd5b506104f36104ee366004612637565b610aa6565b005b34801561050157600080fd5b506104f36105103660046126aa565b610bfc565b34801561052157600080fd5b506102ae601a5481565b34801561053757600080fd5b506102ae600c5481565b34801561054d57600080fd5b506104f361055c3660046126c7565b610ce0565b34801561056d57600080fd5b5060165461031890610100900460ff1681565b34801561058c57600080fd5b506102ae60125481565b3480156105a257600080fd5b506102ae6105b1366004612637565b6001600160a01b031660009081526020819052604090205490565b3480156105d857600080fd5b506104f3610db6565b3480156105ed57600080fd5b50601354610348906001600160a01b031681565b34801561060d57600080fd5b506102ae600a5481565b34801561062357600080fd5b506104f36106323660046126e0565b610e2a565b34801561064357600080fd5b506102ae600e5481565b34801561065957600080fd5b506104f361066836600461270c565b610ee8565b34801561067957600080fd5b506104f3611046565b34801561068e57600080fd5b506005546001600160a01b0316610348565b3480156106ac57600080fd5b506102d6611105565b3480156106c157600080fd5b506103186106d036600461260b565b611114565b3480156106e157600080fd5b506103186106f036600461260b565b6111ad565b34801561070157600080fd5b506104f36107103660046126c7565b6111ba565b34801561072157600080fd5b506104f3610730366004612745565b6112a4565b34801561074157600080fd5b506104f3610750366004612637565b611413565b34801561076157600080fd5b506104f361077036600461270c565b611564565b34801561078157600080fd5b506104f36107903660046126e0565b611669565b3480156107a157600080fd5b506102ae600f5481565b3480156107b757600080fd5b506102ae600d5481565b3480156107cd57600080fd5b506102ae6107dc366004612767565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081357600080fd5b506104f36108223660046126aa565b61171a565b34801561083357600080fd5b506102ae60155481565b34801561084957600080fd5b506104f3610858366004612637565b6117cb565b34801561086957600080fd5b506104f3610878366004612637565b6118b6565b6009805461088a90612795565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690612795565b80156109035780601f106108d857610100808354040283529160200191610903565b820191906000526020600020905b8154815290600101906020018083116108e657829003601f168201915b505050505081565b60606003805461091a90612795565b80601f016020809104026020016040519081016040528092919081815260200182805461094690612795565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b60006109aa338484611a62565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610a545782811015610a475760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a548533858403611a62565b610a5f858585611b86565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109aa918590610aa19086906127e5565b611a62565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a3e906127f8565b6014546001600160a01b0390811690821603610b3e5760405162461bcd60e51b815260206004820152602760248201527f54726561737572792077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b6064820152608401610a3e565b6001600160a01b038116610ba75760405162461bcd60e51b815260206004820152602a60248201527f54726561737572792077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b6064820152608401610a3e565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527f2551960305e8f85b09658bb3075878e3e3cef37a5f7b5d43261f5e6f36b3d6a4906020015b60405180910390a150565b6005546001600160a01b03163314610c265760405162461bcd60e51b8152600401610a3e906127f8565b60185460ff16151581151503610c995760405162461bcd60e51b815260206004820152603260248201527f4d6178207472616e73616374696f6e206c696d697420697320616c72656164796044820152712073657420746f207468617420737461746560701b6064820152608401610a3e565b6018805460ff191682151590811790915560405160ff909116151581527fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf90602001610bf1565b6005546001600160a01b03163314610d0a5760405162461bcd60e51b8152600401610a3e906127f8565b6005811115610d815760405162461bcd60e51b815260206004820152603760248201527f57616c6c657420746f2057616c6c6574205472616e736665722046656520636160448201527f6e6e6f742065786365656420746865206d6178696d756d0000000000000000006064820152608401610a3e565b60128190556040518181527f925fa17eb1bbdac8e18750276099046910212e51b0d15da024f67ce9fb25cc9b90602001610bf1565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610a3e906127f8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e545760405162461bcd60e51b8152600401610a3e906127f8565b600a839055600c829055600e81905580610e6e83856127e5565b610e7891906127e5565b601081905560051015610e9d5760405162461bcd60e51b8152600401610a3e9061282d565b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600a54600c54604051610edb929190918252602082015260400190565b60405180910390a1505050565b6005546001600160a01b03163314610f125760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503610f8e5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b6064820152608401610a3e565b306001600160a01b03831603610fe65760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e0000000000000000006044820152606401610a3e565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1091015b60405180910390a25050565b6005546001600160a01b031633146110705760405162461bcd60e51b8152600401610a3e906127f8565b60165462010000900460ff16156110c95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e00000000000000006044820152606401610a3e565b6016805462ffff001916620101001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b60606004805461091a90612795565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3e565b6111a33385858403611a62565b5060019392505050565b60006109aa338484611b86565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610a3e906127f8565b620f42406111f160025490565b6111fb9190612871565b811161126f5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610a3e565b60158190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610bf1565b6005546001600160a01b031633146112ce5760405162461bcd60e51b8152600401610a3e906127f8565b6103e86112dd6012600a612977565b6002546112ea9190612871565b6112f49190612871565b821015801561132857506103e861130d6012600a612977565b60025461131a9190612871565b6113249190612871565b8110155b61139a5760405162461bcd60e51b815260206004820152603f60248201527f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060448201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c79006064820152608401610a3e565b6113a66012600a612977565b6113b09083612986565b6019556113bf6012600a612977565b6113c99082612986565b601a8190556019546040517f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb13192611407928252602082015260400190565b60405180910390a15050565b6005546001600160a01b0316331461143d5760405162461bcd60e51b8152600401610a3e906127f8565b6013546001600160a01b03908116908216036114ac5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610a3e565b6001600160a01b0381166115165760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610a3e565b601380546001600160a01b0319166001600160a01b0383169081179091556040519081527fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b90602001610bf1565b6005546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03821660009081526008602052604090205481151560ff9091161515036116115760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610a3e565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910161103a565b6005546001600160a01b031633146116935760405162461bcd60e51b8152600401610a3e906127f8565b600b839055600d829055600f819055806116ad83856127e5565b6116b791906127e5565b6011819055600510156116dc5760405162461bcd60e51b8152600401610a3e9061282d565b7f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600b54600d54604051610edb929190918252602082015260400190565b6005546001600160a01b031633146117445760405162461bcd60e51b8152600401610a3e906127f8565b801515601660019054906101000a900460ff161515036117b15760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b6064820152608401610a3e565b601680549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146117f55760405162461bcd60e51b8152600401610a3e906127f8565b6001600160a01b03811661185a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118e05760405162461bcd60e51b8152600401610a3e906127f8565b306001600160a01b0382160361195e5760405162461bcd60e51b815260206004820152603760248201527f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160448201527f6c616e6365206f6620697473206f776e20746f6b656e730000000000000000006064820152608401610a3e565b6001600160a01b03811661197a576119763347611f8b565b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e7919061299d565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906129b6565b5050505b50565b6001600160a01b038316611ac45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3e565b6001600160a01b038216611b255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611bac5760405162461bcd60e51b8152600401610a3e906129d3565b6001600160a01b038216611bd25760405162461bcd60e51b8152600401610a3e90612a18565b60165462010000900460ff1680611c0157506001600160a01b03831660009081526008602052604090205460ff165b80611c2457506001600160a01b03821660009081526008602052604090205460ff165b611c705760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a3e565b80600003611c8957611c848383600061203a565b505050565b60185460ff1615611d6b576007546001600160a01b0384811691161480611cbd57506007546001600160a01b038381169116145b8015611ce257506001600160a01b03831660009081526017602052604090205460ff16155b8015611d0757506001600160a01b03821660009081526017602052604090205460ff16155b15611d6b576007546001600160a01b0390811690841603611d4957601954811115611d445760405162461bcd60e51b8152600401610a3e90612a5b565b611d6b565b601a54811115611d6b5760405162461bcd60e51b8152600401610a3e90612a5b565b3060009081526020819052604090205460155481108015908190611d92575060165460ff16155b8015611dab57506007546001600160a01b038581169116145b8015611dc657506000601154601054611dc491906127e5565b115b8015611dd95750601654610100900460ff165b15611ea3576016805460ff19166001179055601154601054600091611dfd916127e5565b90506000600b54600a54611e1191906127e5565b90506000600e54600f54600d54600c54611e2b91906127e5565b611e3591906127e5565b611e3f91906127e5565b90508115611e6b57600083611e548488612986565b611e5e9190612871565b9050611e698161218e565b505b8015611e9557600083611e7e8388612986565b611e889190612871565b9050611e93816123d9565b505b50506016805460ff19169055505b6001600160a01b03851660009081526008602052604081205460ff1680611ee257506001600160a01b03851660009081526008602052604090205460ff165b80611eef575060165460ff165b15611efc57506000611f3f565b6007546001600160a01b0390811690871603611f1b5750601054611f3f565b6007546001600160a01b0390811690861603611f3a5750601154611f3f565b506012545b8015611f785760006064611f538387612986565b611f5d9190612871565b9050611f698186612ab8565b9450611f7687308361203a565b505b611f8386868661203a565b505050505050565b600081471015611fdd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a3e565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461202a576040519150601f19603f3d011682016040523d82523d6000602084013e61202f565b606091505b509095945050505050565b6001600160a01b0383166120605760405162461bcd60e51b8152600401610a3e906129d3565b6001600160a01b0382166120865760405162461bcd60e51b8152600401610a3e90612a18565b6001600160a01b038316600090815260208190526040902054818110156120fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a3e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906121359084906127e5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218191815260200190565b60405180910390a3611a5b565b600061219b600283612871565b905060006121a98284612ab8565b604080516002808252606082018352929350479260009260208301908036833701905050905030816000815181106121e3576121e3612acb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561223c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122609190612ae1565b8160018151811061227357612273612acb565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906122b9908790600090869030904290600401612afe565b600060405180830381600087803b1580156122d357600080fd5b505af11580156122e7573d6000803e3d6000fd5b50505050600082476122f99190612ab8565b60065460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612368573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061238d9190612b6f565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835247926000929190602083019080368337019050509050308160008151811061241257612412612acb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561246b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248f9190612ae1565b816001815181106124a2576124a2612acb565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906124e8908690600090869030904290600401612afe565b600060405180830381600087803b15801561250257600080fd5b505af1158015612516573d6000803e3d6000fd5b50505050600082476125289190612ab8565b90506000612537600283612871565b601354909150612550906001600160a01b031682611f8b565b50601454612567906001600160a01b031647611f8b565b5060408051868152602081018490527f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e62999910160405180910390a15050505050565b600060208083528351808285015260005b818110156125d5578581018301518582016040015282016125b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a5f57600080fd5b6000806040838503121561261e57600080fd5b8235612629816125f6565b946020939093013593505050565b60006020828403121561264957600080fd5b8135612654816125f6565b9392505050565b60008060006060848603121561267057600080fd5b833561267b816125f6565b9250602084013561268b816125f6565b929592945050506040919091013590565b8015158114611a5f57600080fd5b6000602082840312156126bc57600080fd5b81356126548161269c565b6000602082840312156126d957600080fd5b5035919050565b6000806000606084860312156126f557600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561271f57600080fd5b823561272a816125f6565b9150602083013561273a8161269c565b809150509250929050565b6000806040838503121561275857600080fd5b50508035926020909101359150565b6000806040838503121561277a57600080fd5b8235612785816125f6565b9150602083013561273a816125f6565b600181811c908216806127a957607f821691505b6020821081036127c957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156109ae576109ae6127cf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f546f74616c20466565732063616e6e6f742065786365656420746865206d6178604082015263696d756d60e01b606082015260800190565b60008261288e57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156128ce5781600019048211156128b4576128b46127cf565b808516156128c157918102915b93841c9390800290612898565b509250929050565b6000826128e5575060016109ae565b816128f2575060006109ae565b816001811461290857600281146129125761292e565b60019150506109ae565b60ff841115612923576129236127cf565b50506001821b6109ae565b5060208310610133831016604e8410600b8410161715612951575081810a6109ae565b61295b8383612893565b806000190482111561296f5761296f6127cf565b029392505050565b600061265460ff8416836128d6565b80820281158282048414176109ae576109ae6127cf565b6000602082840312156129af57600080fd5b5051919050565b6000602082840312156129c857600080fd5b81516126548161269c565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252603b908201527f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000606082015260800190565b818103818111156109ae576109ae6127cf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612af357600080fd5b8151612654816125f6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b4e5784516001600160a01b031683529383019391830191600101612b29565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b8457600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204e1ee9859a726c283a83909fdc5da6d3c17582385d6a23cd3b22d4c9bbaa684764736f6c63430008130033

Deployed Bytecode Sourcemap

16277:14841:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29186:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;29186:39:0;;;;;;;;16506:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11562:100::-;;;;;;;;;;;;;:::i;12476:169::-;;;;;;;;;;-1:-1:-1;12476:169:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;12476:169:0;1205:187:1;16358:41:0;;;;;;;;;;-1:-1:-1;16358:41:0;;;;-1:-1:-1;;;;;16358:41:0;;;;;;-1:-1:-1;;;;;1587:32:1;;;1569:51;;1557:2;1542:18;16358:41:0;1397:229:1;11883:108:0;;;;;;;;;;-1:-1:-1;11971:12:0;;11883:108;;30974:141;;;;;;;;;;-1:-1:-1;30974:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;31073:34:0;31049:4;31073:34;;;:25;:34;;;;;;;;;30974:141;12653:573;;;;;;;;;;-1:-1:-1;12653:573:0;;;;;:::i;:::-;;:::i;29137:42::-;;;;;;;;;;-1:-1:-1;29137:42:0;;;;;;;;16577:34;;;;;;;;;;;;;;;;11782:93;;;;;;;;;;-1:-1:-1;11782:93:0;;11865:2;2486:36:1;;2474:2;2459:18;11782:93:0;2344:184:1;13234:215:0;;;;;;;;;;-1:-1:-1;13234:215:0;;;;;:::i;:::-;;:::i;16951:30::-;;;;;;;;;;-1:-1:-1;16951:30:0;;;;-1:-1:-1;;;;;16951:30:0;;;16406:29;;;;;;;;;;-1:-1:-1;16406:29:0;;;;-1:-1:-1;;;;;16406:29:0;;;23712:26;;;;;;;;;;-1:-1:-1;23712:26:0;;;;;;;;;;;21383:125;;;;;;;;;;-1:-1:-1;21383:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21472:28:0;21448:4;21472:28;;;:19;:28;;;;;;;;;21383:125;23336:368;;;;;;;;;;-1:-1:-1;23336:368:0;;;;;:::i;:::-;;:::i;:::-;;29551:311;;;;;;;;;;-1:-1:-1;29551:311:0;;;;;:::i;:::-;;:::i;29232:40::-;;;;;;;;;;;;;;;;16620:33;;;;;;;;;;;;;;;;22586:355;;;;;;;;;;-1:-1:-1;22586:355:0;;;;;:::i;:::-;;:::i;17064:26::-;;;;;;;;;;-1:-1:-1;17064:26:0;;;;;;;;;;;16863:41;;;;;;;;;;;;;;;;11999:127;;;;;;;;;;-1:-1:-1;11999:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12100:18:0;12073:7;12100:18;;;;;;;;;;;;11999:127;10749:148;;;;;;;;;;;;;:::i;16913:31::-;;;;;;;;;;-1:-1:-1;16913:31:0;;;;-1:-1:-1;;;;;16913:31:0;;;16537:33;;;;;;;;;;;;;;;;21516:518;;;;;;;;;;-1:-1:-1;21516:518:0;;;;;:::i;:::-;;:::i;16703:32::-;;;;;;;;;;;;;;;;30567:399;;;;;;;;;;-1:-1:-1;30567:399:0;;;;;:::i;:::-;;:::i;23747:209::-;;;;;;;;;;;;;:::i;10535:79::-;;;;;;;;;;-1:-1:-1;10600:6:0;;-1:-1:-1;;;;;10600:6:0;10535:79;;11670:104;;;;;;;;;;;;;:::i;13457:413::-;;;;;;;;;;-1:-1:-1;13457:413:0;;;;;:::i;:::-;;:::i;12134:175::-;;;;;;;;;;-1:-1:-1;12134:175:0;;;;;:::i;:::-;;:::i;27110:304::-;;;;;;;;;;-1:-1:-1;27110:304:0;;;;;:::i;:::-;;:::i;29870:689::-;;;;;;;;;;-1:-1:-1;29870:689:0;;;;;:::i;:::-;;:::i;22949:379::-;;;;;;;;;;-1:-1:-1;22949:379:0;;;;;:::i;:::-;;:::i;21085:290::-;;;;;;;;;;-1:-1:-1;21085:290:0;;;;;:::i;:::-;;:::i;22042:536::-;;;;;;;;;;-1:-1:-1;22042:536:0;;;;;:::i;:::-;;:::i;16742:33::-;;;;;;;;;;;;;;;;16660:34;;;;;;;;;;;;;;;;12317:151;;;;;;;;;;-1:-1:-1;12317:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12433:18:0;;;12406:7;12433:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12317:151;26923:179;;;;;;;;;;-1:-1:-1;26923:179:0;;;;;:::i;:::-;;:::i;16990:34::-;;;;;;;;;;;;;;;;10905:244;;;;;;;;;;-1:-1:-1;10905:244:0;;;;;:::i;:::-;;:::i;20612:465::-;;;;;;;;;;-1:-1:-1;20612:465:0;;;;;:::i;:::-;;:::i;16506:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11562:100::-;11616:13;11649:5;11642:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11562:100;:::o;12476:169::-;12559:4;12576:39;9938:10;12599:7;12608:6;12576:8;:39::i;:::-;-1:-1:-1;12633:4:0;12476:169;;;;;:::o;12653:573::-;-1:-1:-1;;;;;12837:19:0;;12793:4;12837:19;;;:11;:19;;;;;;;;9938:10;12837:33;;;;;;;;-1:-1:-1;;12885:37:0;;12881:265;;12967:6;12947:16;:26;;12939:79;;;;-1:-1:-1;;;12939:79:0;;5236:2:1;12939:79:0;;;5218:21:1;5275:2;5255:18;;;5248:30;5314:34;5294:18;;;5287:62;-1:-1:-1;;;5365:18:1;;;5358:38;5413:19;;12939:79:0;;;;;;;;;13062:57;13071:6;9938:10;13112:6;13093:16;:25;13062:8;:57::i;:::-;13158:36;13168:6;13176:9;13187:6;13158:9;:36::i;:::-;-1:-1:-1;13214:4:0;;12653:573;-1:-1:-1;;;;12653:573:0:o;13234:215::-;9938:10;13322:4;13371:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13371:34:0;;;;;;;;;;13322:4;;13339:80;;13362:7;;13371:47;;13408:10;;13371:47;:::i;:::-;13339:8;:80::i;23336:368::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;23447:14:::1;::::0;-1:-1:-1;;;;;23447:14:0;;::::1;23428:33:::0;;::::1;::::0;23420:84:::1;;;::::0;-1:-1:-1;;;23420:84:0;;6268:2:1;23420:84:0::1;::::0;::::1;6250:21:1::0;6307:2;6287:18;;;6280:30;6346:34;6326:18;;;6319:62;-1:-1:-1;;;6397:18:1;;;6390:37;6444:19;;23420:84:0::1;6066:403:1::0;23420:84:0::1;-1:-1:-1::0;;;;;23523:29:0;::::1;23515:83;;;::::0;-1:-1:-1;;;23515:83:0;;6676:2:1;23515:83:0::1;::::0;::::1;6658:21:1::0;6715:2;6695:18;;;6688:30;6754:34;6734:18;;;6727:62;-1:-1:-1;;;6805:18:1;;;6798:40;6855:19;;23515:83:0::1;6474:406:1::0;23515:83:0::1;23609:14;:32:::0;;-1:-1:-1;;;;;;23609:32:0::1;-1:-1:-1::0;;;;;23609:32:0;::::1;::::0;;::::1;::::0;;;23659:37:::1;::::0;1569:51:1;;;23659:37:0::1;::::0;1557:2:1;1542:18;23659:37:0::1;;;;;;;;23336:368:::0;:::o;29551:311::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;29650:26:::1;::::0;::::1;;29640:36;;::::0;::::1;;::::0;29632:99:::1;;;::::0;-1:-1:-1;;;29632:99:0;;7087:2:1;29632:99:0::1;::::0;::::1;7069:21:1::0;7126:2;7106:18;;;7099:30;7165:34;7145:18;;;7138:62;-1:-1:-1;;;7216:18:1;;;7209:48;7274:19;;29632:99:0::1;6885:414:1::0;29632:99:0::1;29742:26;:35:::0;;-1:-1:-1;;29742:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29795:59:::1;::::0;29742:35:::1;29827:26:::0;;;1370:14:1;1363:22;1345:41;;29795:59:0::1;::::0;1333:2:1;1318:18;29795:59:0::1;1205:187:1::0;22586:355:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;22731:1:::1;22701:26;:31;;22693:99;;;::::0;-1:-1:-1;;;22693:99:0;;7506:2:1;22693:99:0::1;::::0;::::1;7488:21:1::0;7545:2;7525:18;;;7518:30;7584:34;7564:18;;;7557:62;7655:25;7635:18;;;7628:53;7698:19;;22693:99:0::1;7304:419:1::0;22693:99:0::1;22803:25;:54:::0;;;22875:58:::1;::::0;160:25:1;;;22875:58:0::1;::::0;148:2:1;133:18;22875:58:0::1;14:177:1::0;10749:148:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;10840:6:::1;::::0;10819:40:::1;::::0;10856:1:::1;::::0;-1:-1:-1;;;;;10840:6:0::1;::::0;10819:40:::1;::::0;10856:1;;10819:40:::1;10870:6;:19:::0;;-1:-1:-1;;;;;;10870:19:0::1;::::0;;10749:148::o;21516:518::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;21652:17:::1;:38:::0;;;21701:17:::1;:38:::0;;;21750:16:::1;:36:::0;;;21769:17;21819:37:::1;21721:18:::0;21672;21819:37:::1;:::i;:::-;:56;;;;:::i;:::-;21799:15;:76:::0;;;21915:1:::1;-1:-1:-1::0;21896:20:0::1;21888:69;;;;-1:-1:-1::0;;;21888:69:0::1;;;;;;;:::i;:::-;21975:51;21989:17;;22008;;21975:51;;;;;;8307:25:1::0;;;8363:2;8348:18;;8341:34;8295:2;8280:18;;8133:248;21975:51:0::1;;;;;;;;21516:518:::0;;;:::o;30567:399::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30677:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:45;::::1;;:34;::::0;;::::1;:45;;::::0;30668:95:::1;;;::::0;-1:-1:-1;;;30668:95:0;;8588:2:1;30668:95:0::1;::::0;::::1;8570:21:1::0;8627:2;8607:18;;;8600:30;8666:34;8646:18;;;8639:62;-1:-1:-1;;;8717:18:1;;;8710:34;8761:19;;30668:95:0::1;8386:400:1::0;30668:95:0::1;30801:4;-1:-1:-1::0;;;;;30782:24:0;::::1;::::0;30774:60:::1;;;::::0;-1:-1:-1;;;30774:60:0;;8993:2:1;30774:60:0::1;::::0;::::1;8975:21:1::0;9032:2;9012:18;;;9005:30;9071:25;9051:18;;;9044:53;9114:18;;30774:60:0::1;8791:347:1::0;30774:60:0::1;-1:-1:-1::0;;;;;30847:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:44;;-1:-1:-1;;30847:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30909:49;;1345:41:1;;;30909:49:0::1;::::0;1318:18:1;30909:49:0::1;;;;;;;;30567:399:::0;;:::o;23747:209::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;23810:14:::1;::::0;;;::::1;;;23809:15;23801:52;;;::::0;-1:-1:-1;;;23801:52:0;;9345:2:1;23801:52:0::1;::::0;::::1;9327:21:1::0;9384:2;9364:18;;;9357:30;9423:26;9403:18;;;9396:54;9467:18;;23801:52:0::1;9143:348:1::0;23801:52:0::1;23864:14;:21:::0;;-1:-1:-1;;23896:18:0;;;;;23932:16:::1;::::0;::::1;::::0;-1:-1:-1;;23932:16:0::1;23747:209::o:0;11670:104::-;11726:13;11759:7;11752:14;;;;;:::i;13457:413::-;9938:10;13550:4;13594:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13594:34:0;;;;;;;;;;13647:35;;;;13639:85;;;;-1:-1:-1;;;13639:85:0;;9698:2:1;13639:85:0;;;9680:21:1;9737:2;9717:18;;;9710:30;9776:34;9756:18;;;9749:62;-1:-1:-1;;;9827:18:1;;;9820:35;9872:19;;13639:85:0;9496:401:1;13639:85:0;13760:67;9938:10;13783:7;13811:15;13792:16;:34;13760:8;:67::i;:::-;-1:-1:-1;13858:4:0;;13457:413;-1:-1:-1;;;13457:413:0:o;12134:175::-;12220:4;12237:42;9938:10;12261:9;12272:6;12237:9;:42::i;27110:304::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;27225:9:::1;27209:13;11971:12:::0;;;11883:108;27209:13:::1;:25;;;;:::i;:::-;27197:9;:37;27189:113;;;::::0;-1:-1:-1;;;27189:113:0;;10326:2:1;27189:113:0::1;::::0;::::1;10308:21:1::0;10365:2;10345:18;;;10338:30;10404:34;10384:18;;;10377:62;10475:33;10455:18;;;10448:61;10526:19;;27189:113:0::1;10124:427:1::0;27189:113:0::1;27313:18;:30:::0;;;27361:45:::1;::::0;160:25:1;;;27361:45:0::1;::::0;148:2:1;133:18;27361:45:0::1;14:177:1::0;29870:689:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;30093:5:::1;30072:16;11865:2:::0;30072::::1;:16;:::i;:::-;11971:12:::0;;30055:34:::1;;;;:::i;:::-;30054:44;;;;:::i;:::-;30025:24;:73;;:164;;;;-1:-1:-1::0;30184:5:0::1;30163:16;11865:2:::0;30163::::1;:16;:::i;:::-;11971:12:::0;;30146:34:::1;;;;:::i;:::-;30145:44;;;;:::i;:::-;30116:25;:73;;30025:164;30003:278;;;::::0;-1:-1:-1;;;30003:278:0;;12141:2:1;30003:278:0::1;::::0;::::1;12123:21:1::0;12180:2;12160:18;;;12153:30;12219:34;12199:18;;;12192:62;12290:33;12270:18;;;12263:61;12341:19;;30003:278:0::1;11939:427:1::0;30003:278:0::1;30349:16;11865:2:::0;30349::::1;:16;:::i;:::-;30320:46;::::0;:24;:46:::1;:::i;:::-;30293:23;:73:::0;30433:16:::1;11865:2:::0;30433::::1;:16;:::i;:::-;30404:46;::::0;:25;:46:::1;:::i;:::-;30377:24;:73:::0;;;30501:23:::1;::::0;30468:83:::1;::::0;::::1;::::0;::::1;::::0;8307:25:1;;8363:2;8348:18;;8341:34;8295:2;8280:18;;8133:248;30468:83:0::1;;;;;;;;29870:689:::0;;:::o;22949:379::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;23063:15:::1;::::0;-1:-1:-1;;;;;23063:15:0;;::::1;23043:35:::0;;::::1;::::0;23035:87:::1;;;::::0;-1:-1:-1;;;23035:87:0;;12746:2:1;23035:87:0::1;::::0;::::1;12728:21:1::0;12785:2;12765:18;;;12758:30;12824:34;12804:18;;;12797:62;-1:-1:-1;;;12875:18:1;;;12868:38;12923:19;;23035:87:0::1;12544:404:1::0;23035:87:0::1;-1:-1:-1::0;;;;;23141:30:0;::::1;23133:85;;;::::0;-1:-1:-1;;;23133:85:0;;13155:2:1;23133:85:0::1;::::0;::::1;13137:21:1::0;13194:2;13174:18;;;13167:30;13233:34;13213:18;;;13206:62;-1:-1:-1;;;13284:18:1;;;13277:41;13335:19;;23133:85:0::1;12953:407:1::0;23133:85:0::1;23229:15;:34:::0;;-1:-1:-1;;;;;;23229:34:0::1;-1:-1:-1::0;;;;;23229:34:0;::::1;::::0;;::::1;::::0;;;23281:39:::1;::::0;1569:51:1;;;23281:39:0::1;::::0;1557:2:1;1542:18;23281:39:0::1;1397:229:1::0;21085:290:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21179:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;21171:94:::1;;;::::0;-1:-1:-1;;;21171:94:0;;13567:2:1;21171:94:0::1;::::0;::::1;13549:21:1::0;13606:2;13586:18;;;13579:30;13645:34;13625:18;;;13618:62;-1:-1:-1;;;13696:18:1;;;13689:40;13746:19;;21171:94:0::1;13365:406:1::0;21171:94:0::1;-1:-1:-1::0;;;;;21276:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21276:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21333:34;;1345:41:1;;;21333:34:0::1;::::0;1318:18:1;21333:34:0::1;1205:187:1::0;22042:536:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;22182:18:::1;:40:::0;;;22233:18:::1;:40:::0;;;22284:17:::1;:38:::0;;;22304:18;22356:39:::1;22254:19:::0;22203;22356:39:::1;:::i;:::-;:59;;;;:::i;:::-;22335:16;:80:::0;;;22456:1:::1;-1:-1:-1::0;22436:21:0::1;22428:70;;;;-1:-1:-1::0;;;22428:70:0::1;;;;;;;:::i;:::-;22516:54;22531:18;;22551;;22516:54;;;;;;8307:25:1::0;;;8363:2;8348:18;;8341:34;8295:2;8280:18;;8133:248;26923:179:0;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;27014:8:::1;26999:23;;:11;;;;;;;;;;;:23;;::::0;26991:70:::1;;;::::0;-1:-1:-1;;;26991:70:0;;13978:2:1;26991:70:0::1;::::0;::::1;13960:21:1::0;14017:2;13997:18;;;13990:30;14056:34;14036:18;;;14029:62;-1:-1:-1;;;14107:18:1;;;14100:32;14149:19;;26991:70:0::1;13776:398:1::0;26991:70:0::1;27072:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;27072:22:0;;::::1;::::0;;;::::1;::::0;;26923:179::o;10905:244::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10994:22:0;::::1;10986:73;;;::::0;-1:-1:-1;;;10986:73:0;;14381:2:1;10986:73:0::1;::::0;::::1;14363:21:1::0;14420:2;14400:18;;;14393:30;14459:34;14439:18;;;14432:62;-1:-1:-1;;;14510:18:1;;;14503:36;14556:19;;10986:73:0::1;14179:402:1::0;10986:73:0::1;11096:6;::::0;11075:38:::1;::::0;-1:-1:-1;;;;;11075:38:0;;::::1;::::0;11096:6:::1;::::0;11075:38:::1;::::0;11096:6:::1;::::0;11075:38:::1;11124:6;:17:::0;;-1:-1:-1;;;;;;11124:17:0::1;-1:-1:-1::0;;;;;11124:17:0;;;::::1;::::0;;;::::1;::::0;;10905:244::o;20612:465::-;10662:6;;-1:-1:-1;;;;;10662:6:0;9938:10;10662:22;10654:67;;;;-1:-1:-1;;;10654:67:0;;;;;;;:::i;:::-;20708:4:::1;-1:-1:-1::0;;;;;20691:22:0;::::1;::::0;20683:90:::1;;;::::0;-1:-1:-1;;;20683:90:0;;14788:2:1;20683:90:0::1;::::0;::::1;14770:21:1::0;14827:2;14807:18;;;14800:30;14866:34;14846:18;;;14839:62;14937:25;14917:18;;;14910:53;14980:19;;20683:90:0::1;14586:419:1::0;20683:90:0::1;-1:-1:-1::0;;;;;20788:21:0;::::1;20784:127;;20826:52;20834:10;20856:21;20826:29;:52::i;:::-;;20612:465:::0;:::o;20784:127::-:1;20983:35;::::0;-1:-1:-1;;;20983:35:0;;21012:4:::1;20983:35;::::0;::::1;1569:51:1::0;20948:5:0;;20921:17:::1;::::0;-1:-1:-1;;;;;20983:20:0;::::1;::::0;::::1;::::0;1542:18:1;;20983:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21029:40;::::0;-1:-1:-1;;;21029:40:0;;21049:10:::1;21029:40;::::0;::::1;15373:51:1::0;15440:18;;;15433:34;;;20965:53:0;;-1:-1:-1;;;;;;21029:19:0;::::1;::::0;::::1;::::0;15346:18:1;;21029:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20672:405;;10732:1;20612:465:::0;:::o;15625:380::-;-1:-1:-1;;;;;15761:19:0;;15753:68;;;;-1:-1:-1;;;15753:68:0;;15930:2:1;15753:68:0;;;15912:21:1;15969:2;15949:18;;;15942:30;16008:34;15988:18;;;15981:62;-1:-1:-1;;;16059:18:1;;;16052:34;16103:19;;15753:68:0;15728:400:1;15753:68:0;-1:-1:-1;;;;;15840:21:0;;15832:68;;;;-1:-1:-1;;;15832:68:0;;16335:2:1;15832:68:0;;;16317:21:1;16374:2;16354:18;;;16347:30;16413:34;16393:18;;;16386:62;-1:-1:-1;;;16464:18:1;;;16457:32;16506:19;;15832:68:0;16133:398:1;15832:68:0;-1:-1:-1;;;;;15913:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15965:32;;160:25:1;;;15965:32:0;;133:18:1;15965:32:0;;;;;;;15625:380;;;:::o;23964:2951::-;-1:-1:-1;;;;;24061:18:0;;24053:68;;;;-1:-1:-1;;;24053:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24140:16:0;;24132:64;;;;-1:-1:-1;;;24132:64:0;;;;;;;:::i;:::-;24215:14;;;;;;;;:43;;-1:-1:-1;;;;;;24233:25:0;;;;;;:19;:25;;;;;;;;24215:43;:70;;;-1:-1:-1;;;;;;24262:23:0;;;;;;:19;:23;;;;;;;;24215:70;24207:107;;;;-1:-1:-1;;;24207:107:0;;17548:2:1;24207:107:0;;;17530:21:1;17587:2;17567:18;;;17560:30;17626:26;17606:18;;;17599:54;17670:18;;24207:107:0;17346:348:1;24207:107:0;24338:6;24348:1;24338:11;24334:93;;24366:28;24382:4;24388:2;24392:1;24366:15;:28::i;:::-;23964:2951;;;:::o;24334:93::-;24443:26;;;;24439:752;;;24509:13;;-1:-1:-1;;;;;24501:21:0;;;24509:13;;24501:21;;:44;;-1:-1:-1;24532:13:0;;-1:-1:-1;;;;;24526:19:0;;;24532:13;;24526:19;24501:44;24500:99;;;;-1:-1:-1;;;;;;24568:31:0;;;;;;:25;:31;;;;;;;;24567:32;24500:99;:151;;;;-1:-1:-1;;;;;;24622:29:0;;;;;;:25;:29;;;;;;;;24621:30;24500:151;24496:684;;;24698:13;;-1:-1:-1;;;;;24698:13:0;;;24690:21;;;;24686:479;;24780:23;;24770:6;:33;;24736:180;;;;-1:-1:-1;;;24736:180:0;;;;;;;:::i;:::-;24686:479;;;25009:24;;24999:6;:34;;24965:180;;;;-1:-1:-1;;;24965:180:0;;;;;;;:::i;:::-;25246:4;25197:28;12100:18;;;;;;;;;;;25304;;25280:42;;;;;;;25339:33;;-1:-1:-1;25364:8:0;;;;25363:9;25339:33;:69;;;;-1:-1:-1;25395:13:0;;-1:-1:-1;;;;;25389:19:0;;;25395:13;;25389:19;25339:69;:124;;;;;25462:1;25443:16;;25425:15;;:34;;;;:::i;:::-;:38;25339:124;:152;;;;-1:-1:-1;25480:11:0;;;;;;;25339:152;25335:934;;;25518:8;:15;;-1:-1:-1;;25518:15:0;25529:4;25518:15;;;25587:16;;25569:15;;25518:8;;25569:34;;;:::i;:::-;25550:53;;25618:22;25663:18;;25643:17;;:38;;;;:::i;:::-;25618:63;;25696:22;25782:16;;25762:17;;25741:18;;25721:17;;:38;;;;:::i;:::-;:58;;;;:::i;:::-;:77;;;;:::i;:::-;25696:102;-1:-1:-1;25819:18:0;;25815:183;;25858:23;25924:8;25884:37;25907:14;25884:20;:37;:::i;:::-;:48;;;;:::i;:::-;25858:74;;25951:31;25966:15;25951:14;:31::i;:::-;25839:159;25815:183;26030:18;;26026:189;;26069:23;26135:8;26095:37;26118:14;26095:20;:37;:::i;:::-;:48;;;;:::i;:::-;26069:74;;26162:37;26183:15;26162:20;:37::i;:::-;26050:165;26026:189;-1:-1:-1;;26241:8:0;:16;;-1:-1:-1;;26241:16:0;;;-1:-1:-1;25335:934:0;-1:-1:-1;;;;;26314:25:0;;26281:18;26314:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26343:23:0;;;;;;:19;:23;;;;;;;;26314:52;:64;;;-1:-1:-1;26370:8:0;;;;26314:64;26310:357;;;-1:-1:-1;26408:1:0;26310:357;;;26439:13;;-1:-1:-1;;;;;26439:13:0;;;26431:21;;;;26427:240;;-1:-1:-1;26482:15:0;;26427:240;;;26525:13;;-1:-1:-1;;;;;26525:13:0;;;26519:19;;;;26515:152;;-1:-1:-1;26568:16:0;;26515:152;;;-1:-1:-1;26630:25:0;;26515:152;26683:14;;26679:183;;26714:12;26753:3;26730:19;26739:10;26730:6;:19;:::i;:::-;26729:27;;;;:::i;:::-;26714:42;-1:-1:-1;26780:13:0;26714:42;26780:6;:13;:::i;:::-;26771:22;;26808:42;26824:4;26838;26845;26808:15;:42::i;:::-;26699:163;26679:183;26874:33;26890:4;26896:2;26900:6;26874:15;:33::i;:::-;24042:2873;;;23964:2951;;;:::o;9552:266::-;9631:4;9680:6;9655:21;:31;;9647:73;;;;-1:-1:-1;;;9647:73:0;;18462:2:1;9647:73:0;;;18444:21:1;18501:2;18481:18;;;18474:30;18540:31;18520:18;;;18513:59;18589:18;;9647:73:0;18260:353:1;9647:73:0;9734:12;9752:9;-1:-1:-1;;;;;9752:14:0;9774:6;9752:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9733:52:0;;9552:266;-1:-1:-1;;;;;9552:266:0:o;13878:733::-;-1:-1:-1;;;;;14018:20:0;;14010:70;;;;-1:-1:-1;;;14010:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14099:23:0;;14091:71;;;;-1:-1:-1;;;14091:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14259:17:0;;14235:21;14259:17;;;;;;;;;;;14295:23;;;;14287:74;;;;-1:-1:-1;;;14287:74:0;;19030:2:1;14287:74:0;;;19012:21:1;19069:2;19049:18;;;19042:30;19108:34;19088:18;;;19081:62;-1:-1:-1;;;19159:18:1;;;19152:36;19205:19;;14287:74:0;18828:402:1;14287:74:0;-1:-1:-1;;;;;14397:17:0;;;:9;:17;;;;;;;;;;;14417:22;;;14397:42;;14461:20;;;;;;;;:30;;14433:6;;14397:9;14461:30;;14433:6;;14461:30;:::i;:::-;;;;;;;;14526:9;-1:-1:-1;;;;;14509:35:0;14518:6;-1:-1:-1;;;;;14509:35:0;;14537:6;14509:35;;;;160:25:1;;148:2;133:18;;14:177;14509:35:0;;;;;;;;14557:46;23964:2951;27422:876;27481:12;27496:10;27505:1;27496:6;:10;:::i;:::-;27481:25;-1:-1:-1;27517:17:0;27537:13;27481:25;27537:6;:13;:::i;:::-;27646:16;;;27660:1;27646:16;;;;;;;;27517:33;;-1:-1:-1;27588:21:0;;27563:22;;27646:16;;;;;;;;;;-1:-1:-1;27646:16:0;27622:40;;27691:4;27673;27678:1;27673:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27673:23:0;;;:7;;;;;;;;;;:23;;;;27717:15;;:22;;;-1:-1:-1;;;27717:22:0;;;;:15;;;;;:20;;:22;;;;;27673:7;;27717:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27707:4;27712:1;27707:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27707:32:0;;;:7;;;;;;;;;:32;27752:15;;:179;;-1:-1:-1;;;27752:179:0;;:15;;;:66;;:179;;27833:4;;27752:15;;27868:4;;27895;;27915:15;;27752:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27952:18;27997:14;27973:21;:38;;;;:::i;:::-;28024:15;;:205;;-1:-1:-1;;;28024:205:0;;28097:4;28024:205;;;21081:34:1;21131:18;;;21124:34;;;28024:15:0;21174:18:1;;;21167:34;;;21217:18;;;21210:34;28181:6:0;21260:19:1;;;21253:44;28203:15:0;21313:19:1;;;21306:35;27952:59:0;;-1:-1:-1;;;;;;28024:15:0;;:31;;27952:59;;21015:19:1;;28024:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;28247:43:0;;;21865:25:1;;;21921:2;21906:18;;21899:34;;;21949:18;;;21942:34;;;28247:43:0;;-1:-1:-1;21853:2:1;21838:18;28247:43:0;;;;;;;27470:828;;;;;27422:876;:::o;28306:758::-;28459:16;;;28473:1;28459:16;;;;;;;;28401:21;;28376:22;;28459:16;28473:1;28459:16;;;;;;;;;;-1:-1:-1;28459:16:0;28435:40;;28504:4;28486;28491:1;28486:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28486:23:0;;;:7;;;;;;;;;;:23;;;;28530:15;;:22;;;-1:-1:-1;;;28530:22:0;;;;:15;;;;;:20;;:22;;;;;28486:7;;28530:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28520:4;28525:1;28520:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28520:32:0;;;:7;;;;;;;;;:32;28565:15;;:186;;-1:-1:-1;;;28565:186:0;;:15;;;:66;;:186;;28646:11;;28565:15;;28688:4;;28715;;28735:15;;28565:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28764:18;28809:14;28785:21;:38;;;;:::i;:::-;28764:59;-1:-1:-1;28834:17:0;28854:14;28867:1;28764:59;28854:14;:::i;:::-;28889:15;;28834:34;;-1:-1:-1;28881:45:0;;-1:-1:-1;;;;;28889:15:0;28834:34;28881;:45::i;:::-;-1:-1:-1;28945:14:0;;28937:56;;-1:-1:-1;;;;;28945:14:0;28971:21;28937:33;:56::i;:::-;-1:-1:-1;29011:45:0;;;8307:25:1;;;8363:2;8348:18;;8341:34;;;29011:45:0;;8280:18:1;29011:45:0;;;;;;;28365:699;;;;28306:758;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;:::-;1867:5;1631:247;-1:-1:-1;;;1631:247:1:o;1883:456::-;1960:6;1968;1976;2029:2;2017:9;2008:7;2004:23;2000:32;1997:52;;;2045:1;2042;2035:12;1997:52;2084:9;2071:23;2103:31;2128:5;2103:31;:::i;:::-;2153:5;-1:-1:-1;2210:2:1;2195:18;;2182:32;2223:33;2182:32;2223:33;:::i;:::-;1883:456;;2275:7;;-1:-1:-1;;;2329:2:1;2314:18;;;;2301:32;;1883:456::o;2741:118::-;2827:5;2820:13;2813:21;2806:5;2803:32;2793:60;;2849:1;2846;2839:12;2864:241;2920:6;2973:2;2961:9;2952:7;2948:23;2944:32;2941:52;;;2989:1;2986;2979:12;2941:52;3028:9;3015:23;3047:28;3069:5;3047:28;:::i;3110:180::-;3169:6;3222:2;3210:9;3201:7;3197:23;3193:32;3190:52;;;3238:1;3235;3228:12;3190:52;-1:-1:-1;3261:23:1;;3110:180;-1:-1:-1;3110:180:1:o;3295:316::-;3372:6;3380;3388;3441:2;3429:9;3420:7;3416:23;3412:32;3409:52;;;3457:1;3454;3447:12;3409:52;-1:-1:-1;;3480:23:1;;;3550:2;3535:18;;3522:32;;-1:-1:-1;3601:2:1;3586:18;;;3573:32;;3295:316;-1:-1:-1;3295:316:1:o;3616:382::-;3681:6;3689;3742:2;3730:9;3721:7;3717:23;3713:32;3710:52;;;3758:1;3755;3748:12;3710:52;3797:9;3784:23;3816:31;3841:5;3816:31;:::i;:::-;3866:5;-1:-1:-1;3923:2:1;3908:18;;3895:32;3936:30;3895:32;3936:30;:::i;:::-;3985:7;3975:17;;;3616:382;;;;;:::o;4003:248::-;4071:6;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;-1:-1:-1;;4171:23:1;;;4241:2;4226:18;;;4213:32;;-1:-1:-1;4003:248:1:o;4256:388::-;4324:6;4332;4385:2;4373:9;4364:7;4360:23;4356:32;4353:52;;;4401:1;4398;4391:12;4353:52;4440:9;4427:23;4459:31;4484:5;4459:31;:::i;:::-;4509:5;-1:-1:-1;4566:2:1;4551:18;;4538:32;4579:33;4538:32;4579:33;:::i;4649:380::-;4728:1;4724:12;;;;4771;;;4792:61;;4846:4;4838:6;4834:17;4824:27;;4792:61;4899:2;4891:6;4888:14;4868:18;4865:38;4862:161;;4945:10;4940:3;4936:20;4933:1;4926:31;4980:4;4977:1;4970:15;5008:4;5005:1;4998:15;4862:161;;4649:380;;;:::o;5443:127::-;5504:10;5499:3;5495:20;5492:1;5485:31;5535:4;5532:1;5525:15;5559:4;5556:1;5549:15;5575:125;5640:9;;;5661:10;;;5658:36;;;5674:18;;:::i;5705:356::-;5907:2;5889:21;;;5926:18;;;5919:30;5985:34;5980:2;5965:18;;5958:62;6052:2;6037:18;;5705:356::o;7728:400::-;7930:2;7912:21;;;7969:2;7949:18;;;7942:30;8008:34;8003:2;7988:18;;7981:62;-1:-1:-1;;;8074:2:1;8059:18;;8052:34;8118:3;8103:19;;7728:400::o;9902:217::-;9942:1;9968;9958:132;;10012:10;10007:3;10003:20;10000:1;9993:31;10047:4;10044:1;10037:15;10075:4;10072:1;10065:15;9958:132;-1:-1:-1;10104:9:1;;9902:217::o;10556:422::-;10645:1;10688:5;10645:1;10702:270;10723:7;10713:8;10710:21;10702:270;;;10782:4;10778:1;10774:6;10770:17;10764:4;10761:27;10758:53;;;10791:18;;:::i;:::-;10841:7;10831:8;10827:22;10824:55;;;10861:16;;;;10824:55;10940:22;;;;10900:15;;;;10702:270;;;10706:3;10556:422;;;;;:::o;10983:806::-;11032:5;11062:8;11052:80;;-1:-1:-1;11103:1:1;11117:5;;11052:80;11151:4;11141:76;;-1:-1:-1;11188:1:1;11202:5;;11141:76;11233:4;11251:1;11246:59;;;;11319:1;11314:130;;;;11226:218;;11246:59;11276:1;11267:10;;11290:5;;;11314:130;11351:3;11341:8;11338:17;11335:43;;;11358:18;;:::i;:::-;-1:-1:-1;;11414:1:1;11400:16;;11429:5;;11226:218;;11528:2;11518:8;11515:16;11509:3;11503:4;11500:13;11496:36;11490:2;11480:8;11477:16;11472:2;11466:4;11463:12;11459:35;11456:77;11453:159;;;-1:-1:-1;11565:19:1;;;11597:5;;11453:159;11644:34;11669:8;11663:4;11644:34;:::i;:::-;11714:6;11710:1;11706:6;11702:19;11693:7;11690:32;11687:58;;;11725:18;;:::i;:::-;11763:20;;10983:806;-1:-1:-1;;;10983:806:1:o;11794:140::-;11852:5;11881:47;11922:4;11912:8;11908:19;11902:4;11881:47;:::i;12371:168::-;12444:9;;;12475;;12492:15;;;12486:22;;12472:37;12462:71;;12513:18;;:::i;15010:184::-;15080:6;15133:2;15121:9;15112:7;15108:23;15104:32;15101:52;;;15149:1;15146;15139:12;15101:52;-1:-1:-1;15172:16:1;;15010:184;-1:-1:-1;15010:184:1:o;15478:245::-;15545:6;15598:2;15586:9;15577:7;15573:23;15569:32;15566:52;;;15614:1;15611;15604:12;15566:52;15646:9;15640:16;15665:28;15687:5;15665:28;:::i;16536:401::-;16738:2;16720:21;;;16777:2;16757:18;;;16750:30;16816:34;16811:2;16796:18;;16789:62;-1:-1:-1;;;16882:2:1;16867:18;;16860:35;16927:3;16912:19;;16536:401::o;16942:399::-;17144:2;17126:21;;;17183:2;17163:18;;;17156:30;17222:34;17217:2;17202:18;;17195:62;-1:-1:-1;;;17288:2:1;17273:18;;17266:33;17331:3;17316:19;;16942:399::o;17699:423::-;17901:2;17883:21;;;17940:2;17920:18;;;17913:30;17979:34;17974:2;17959:18;;17952:62;18050:29;18045:2;18030:18;;18023:57;18112:3;18097:19;;17699:423::o;18127:128::-;18194:9;;;18215:11;;;18212:37;;;18229:18;;:::i;19367:127::-;19428:10;19423:3;19419:20;19416:1;19409:31;19459:4;19456:1;19449:15;19483:4;19480:1;19473:15;19499:251;19569:6;19622:2;19610:9;19601:7;19597:23;19593:32;19590:52;;;19638:1;19635;19628:12;19590:52;19670:9;19664:16;19689:31;19714:5;19689:31;:::i;19755:980::-;20017:4;20065:3;20054:9;20050:19;20096:6;20085:9;20078:25;20122:2;20160:6;20155:2;20144:9;20140:18;20133:34;20203:3;20198:2;20187:9;20183:18;20176:31;20227:6;20262;20256:13;20293:6;20285;20278:22;20331:3;20320:9;20316:19;20309:26;;20370:2;20362:6;20358:15;20344:29;;20391:1;20401:195;20415:6;20412:1;20409:13;20401:195;;;20480:13;;-1:-1:-1;;;;;20476:39:1;20464:52;;20571:15;;;;20536:12;;;;20512:1;20430:9;20401:195;;;-1:-1:-1;;;;;;;20652:32:1;;;;20647:2;20632:18;;20625:60;-1:-1:-1;;;20716:3:1;20701:19;20694:35;20613:3;19755:980;-1:-1:-1;;;19755:980:1:o;21352:306::-;21440:6;21448;21456;21509:2;21497:9;21488:7;21484:23;21480:32;21477:52;;;21525:1;21522;21515:12;21477:52;21554:9;21548:16;21538:26;;21604:2;21593:9;21589:18;21583:25;21573:35;;21648:2;21637:9;21633:18;21627:25;21617:35;;21352:306;;;;;:::o

Swarm Source

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