ETH Price: $2,521.45 (-0.04%)

Token

Steve (STEVE)
 

Overview

Max Total Supply

1,000,000,000,000 STEVE

Holders

269

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,986,673,176.5063556796875 STEVE

Value
$0.00
0x4c7dc368576fe7f188cf6546c43b419dc2a384e9
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:
SteveOfficialCA

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-31
*/

/*

⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣀⡿⠿⠿⠿⠿⠿⠿⢿⣀⣀⣀⣀⣀⡀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⠿⣇⣀⣀⣀⣀⣀⣀⣸⠿⢿⣿⣿⣿⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠻⠿⠿⠿⠿⠿⣿⣿⣀⡸⠿⢿⣿⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣧⣤⡼⠿⢧⣤⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣿⠛⢻⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⠀⠀⠀⠀⣤⣤⣿⣿⣿⣿⠛⠛⠀⢸⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⠀⠀⢠⣤⣿⣿⣿⣿⠛⠛⠀⠀⠀⢸⣿⡇⠀⢸⣿⡇
⠀⠀⠀⠀⢰⣶⣾⣿⣿⣿⠛⠛⠀⠀⠀⠀⠀⠈⠛⢳⣶⡞⠛⠁
⠀⠀⢰⣶⣾⣿⣿⣿⡏⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀
⢰⣶⡎⠉⢹⣿⡏⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢸⣿⣷⣶⡎⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
 
https://www.stevecoin.co/
https://t.me/stevecoinportal
https://twitter.com/SteveCoinERC20
 
*/

// SPDX-License-Identifier: MIT                                                                               

pragma solidity 0.8.20;

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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");

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

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

contract SteveOfficialCA is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;
    address public devAddress;


    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool botscantrade = false;
    bool killBots = true;



    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;


    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;


    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    
    /******************/

    //exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) private botWallets;


    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);



    event MaxTransactionExclusion(address _address, bool excluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Steve", "STEVE") {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        
        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 totalSupply = 1000000000000 * 1e18;
        
        maxBuyAmount = totalSupply * 1 / 100;
        maxSellAmount = totalSupply * 1 / 100;
        maxWalletAmount = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025% swap amount

        buyMarketingFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 5;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee ;

        sellMarketingFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 5;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee ;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        marketingAddress = 0xee78DC3f9ce8144c930aB4d2DA699a41fe1657ce;
        devAddress = 0x2e821789EA57d9a368aB23915Ee8e7efE66Fae6C;


        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
   
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {

        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {

        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {

        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {

  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        
        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee ;

    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;

        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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(amount > 0, "amount must be greater than 0");

        if(botWallets[from] || botWallets[to]){
            require(botscantrade, "bots arent allowed to trade");
        }
        
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 4 && _holderLastTransferTimestamp[to] < block.number - 10, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 penaltyAmount = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to marketing wallet to allow potential refund.
            if(tradingActiveBlock >= block.number + 1 && automatedMarketMakerPairs[from]){
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, marketingAddress, penaltyAmount);
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;

            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;

            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees + penaltyAmount;
        }

        super._transfer(from, to, amount);

        if(killBots){
            if(!_isExcludedFromFees[to] && !_isExcludedFromFees[from] && to != uniswapV2Pair && to != owner()){
                botWallets[to] = true;

            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev ;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));


        ethForLiquidity -= ethForMarketing + ethForDev ;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

        (success,) = address(devAddress).call{value: ethForDev}("");


        (success,) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    function addCreeperWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = true;
    }
    
    function removeCreeperWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }

    function setBotsTrade(bool _value) external onlyOwner{
        botscantrade = _value;
    }

    function setKillCreepers(bool _value) external onlyOwner{
        killBots = _value;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addCreeperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeCreeperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBotsTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setKillCreepers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600d55600e8054600162ffffff1991821617909155601080549091166201000117905534801562000034575f80fd5b5060405180604001604052806005815260200164537465766560d81b81525060405180604001604052806005815260200164535445564560d81b81525081600390816200008291906200080a565b5060046200009182826200080a565b5050505f620000a56200041260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602062003d2a833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010381600162000416565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001729190620008d2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001be573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e49190620008d2565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200022f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002559190620008d2565b6001600160a01b031660a08190526200027090600162000478565b6c0c9f2c9cd04674edea4000000060646200028d82600162000915565b62000299919062000935565b6006556064620002ab82600162000915565b620002b7919062000935565b6007556064620002c982600162000915565b620002d5919062000935565b600855620186a0620002e982601962000915565b620002f5919062000935565b600a55600f60128190555f6013819055600560148190559162000319919062000955565b62000325919062000955565b601155601460168190555f6017819055600560188190559162000349919062000955565b62000355919062000955565b6015556200036583600162000416565b6200037230600162000416565b6200038161dead600162000416565b6200038e836001620004e2565b6200039b306001620004e2565b620003aa61dead6001620004e2565b600b80546001600160a01b031990811673ee78dc3f9ce8144c930ab4d2da699a41fe1657ce17909155600c8054909116732e821789ea57d9a368ab23915ee8e7efe66fae6c179055620003fe83826200058e565b620004098362000670565b5050506200096b565b3390565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382165f908152601f60205260409020805460ff1916821515179055620004a7828262000416565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b6005546001600160a01b03163314620005305760405162461bcd60e51b815260206004820181905260248201525f8051602062003d0a83398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005e65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000527565b8060025f828254620005f9919062000955565b90915550506001600160a01b0382165f90815260208190526040812080548392906200062790849062000955565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006ba5760405162461bcd60e51b815260206004820181905260248201525f8051602062003d0a833981519152604482015260640162000527565b6001600160a01b038116620007215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000527565b6005546040516001600160a01b038084169216905f8051602062003d2a833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200079357607f821691505b602082108103620007b257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000805575f81815260208120601f850160051c81016020861015620007e05750805b601f850160051c820191505b818110156200080157828155600101620007ec565b5050505b505050565b81516001600160401b038111156200082657620008266200076a565b6200083e816200083784546200077e565b84620007b8565b602080601f83116001811462000874575f84156200085c5750858301515b5f19600386901b1c1916600185901b17855562000801565b5f85815260208120601f198616915b82811015620008a45788860151825594840194600190910190840162000883565b5085821015620008c257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008e3575f80fd5b81516001600160a01b0381168114620008fa575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200092f576200092f62000901565b92915050565b5f826200095057634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200092f576200092f62000901565b60805160a051613337620009d35f395f81816105ad0152818161101b0152818161158901528181611ec5015261261601525f818161044301528181611e8801528181612b0701528181612bbe01528181612bfa01528181612c6e0152612cca01526133375ff3fe6080604052600436106103a0575f3560e01c80638da5cb5b116101de578063c024666811610108578063dd62ed3e1161009d578063f11a24d31161006d578063f11a24d314610aa7578063f2fde38b14610abc578063f5648a4f14610adb578063f637434214610aef575f80fd5b8063dd62ed3e14610a25578063e2f4560514610a69578063e884f26014610a7e578063ee40166e14610a92575f80fd5b8063d0d41fe1116100d8578063d0d41fe1146109b3578063d257b34f146109d2578063d85ba063146109f1578063dc3f0d0f14610a06575f80fd5b8063c02466681461093d578063c17b5b8c1461095c578063c18bc1951461097b578063c876d0b91461099a575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb146108bd578063aa4bde28146108dc578063b62496f5146108f1578063bbc0c7421461091f575f80fd5b80639fccce3214610855578063a0d82dc51461086a578063a457c2d71461087f578063a5ece9411461089e575f80fd5b806392136913116101b957806392136913146107f857806395d89b411461080d5780639a7a23d6146108215780639c3b4fdc14610840575f80fd5b80638da5cb5b1461079d5780638e957101146107ba578063906e9dd0146107d9575f80fd5b80634a62bb65116102ca578063751039fc1161025f57806381e88fc11161022f57806381e88fc1146107365780638366e79a1461075557806388e765ff146107745780638a8c523c14610789575f80fd5b8063751039fc146106cf5780637571336a146106e35780637bce5a04146107025780638095d56414610717575f80fd5b80636a486a8e1161029a5780636a486a8e146106535780636ddd17131461066857806370a0823114610687578063715018a6146106bb575f80fd5b80634a62bb65146105cf57806360d48489146105e857806364e4dcb61461061f57806366d602ae1461063e575f80fd5b80632307b441116103405780633950935111610310578063395093511461053f5780633ad10ef61461055e5780634915c3821461057d57806349bd5a5e1461059c575f80fd5b80632307b441146104c557806323b872dd146104e65780632be32b6114610505578063313ce56714610524575f80fd5b80631694505e1161037b5780631694505e1461043257806318160ddd1461047d5780631a8145bb1461049b5780631f3fed8f146104b0575f80fd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b04565b6040516103cc9190612d46565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612da8565b610b94565b60405190151581526020016103cc565b34801561040f575f80fd5b506103f461041e366004612dd2565b601d6020525f908152604090205460ff1681565b34801561043d575f80fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103cc565b348015610488575f80fd5b506002545b6040519081526020016103cc565b3480156104a6575f80fd5b5061048d601a5481565b3480156104bb575f80fd5b5061048d60195481565b3480156104d0575f80fd5b506104e46104df366004612ec4565b610baa565b005b3480156104f1575f80fd5b506103f4610500366004612f80565b610d1b565b348015610510575f80fd5b506104e461051f366004612fbe565b610dc3565b34801561052f575f80fd5b50604051601281526020016103cc565b34801561054a575f80fd5b506103f4610559366004612da8565b610e3b565b348015610569575f80fd5b50600c54610465906001600160a01b031681565b348015610588575f80fd5b506104e4610597366004612dd2565b610e76565b3480156105a7575f80fd5b506104657f000000000000000000000000000000000000000000000000000000000000000081565b3480156105da575f80fd5b50600e546103f49060ff1681565b3480156105f3575f80fd5b506103f4610602366004612dd2565b6001600160a01b03165f908152601e602052604090205460ff1690565b34801561062a575f80fd5b506104e4610639366004612dd2565b610ec3565b348015610649575f80fd5b5061048d60075481565b34801561065e575f80fd5b5061048d60155481565b348015610673575f80fd5b50600e546103f49062010000900460ff1681565b348015610692575f80fd5b5061048d6106a1366004612dd2565b6001600160a01b03165f9081526020819052604090205490565b3480156106c6575f80fd5b506104e4610f0d565b3480156106da575f80fd5b506104e4610f80565b3480156106ee575f80fd5b506104e46106fd366004612fe2565b610fea565b34801561070d575f80fd5b5061048d60125481565b348015610722575f80fd5b506104e4610731366004613019565b6110d4565b348015610741575f80fd5b506104e4610750366004613042565b61112a565b348015610760575f80fd5b506103f461076f36600461305d565b61116e565b34801561077f575f80fd5b5061048d60065481565b348015610794575f80fd5b506104e4611370565b3480156107a8575f80fd5b506005546001600160a01b0316610465565b3480156107c5575f80fd5b506104e46107d4366004613042565b611431565b3480156107e4575f80fd5b506104e46107f3366004612dd2565b611477565b348015610803575f80fd5b5061048d60165481565b348015610818575f80fd5b506103bf61154e565b34801561082c575f80fd5b506104e461083b366004612fe2565b61155d565b34801561084b575f80fd5b5061048d60145481565b348015610860575f80fd5b5061048d601b5481565b348015610875575f80fd5b5061048d60185481565b34801561088a575f80fd5b506103f4610899366004612da8565b61163c565b3480156108a9575f80fd5b50600b54610465906001600160a01b031681565b3480156108c8575f80fd5b506103f46108d7366004612da8565b6116d4565b3480156108e7575f80fd5b5061048d60085481565b3480156108fc575f80fd5b506103f461090b366004612dd2565b601f6020525f908152604090205460ff1681565b34801561092a575f80fd5b50600e546103f490610100900460ff1681565b348015610948575f80fd5b506104e4610957366004612fe2565b6116e0565b348015610967575f80fd5b506104e4610976366004613019565b611768565b348015610986575f80fd5b506104e4610995366004612fbe565b6117be565b3480156109a5575f80fd5b506010546103f49060ff1681565b3480156109be575f80fd5b506104e46109cd366004612dd2565b61182f565b3480156109dd575f80fd5b506104e46109ec366004612fbe565b6118f8565b3480156109fc575f80fd5b5061048d60115481565b348015610a11575f80fd5b506104e4610a20366004612fbe565b611927565b348015610a30575f80fd5b5061048d610a3f36600461305d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a74575f80fd5b5061048d600a5481565b348015610a89575f80fd5b506104e4611998565b348015610a9d575f80fd5b5061048d600d5481565b348015610ab2575f80fd5b5061048d60135481565b348015610ac7575f80fd5b506104e4610ad6366004612dd2565b6119ce565b348015610ae6575f80fd5b506104e4611ab8565b348015610afa575f80fd5b5061048d60175481565b606060038054610b1390613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3f90613089565b8015610b8a5780601f10610b6157610100808354040283529160200191610b8a565b820191905f5260205f20905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b5f610ba0338484611b2c565b5060015b92915050565b6005546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906130c1565b60405180910390fd5b8051825114610c2e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bd4565b60c8825110610c9e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bd4565b5f5b8251811015610d16575f838281518110610cbc57610cbc6130f6565b602002602001015190505f838381518110610cd957610cd96130f6565b6020026020010151670de0b6b3a7640000610cf4919061311e565b9050610d01338383611c4f565b50508080610d0e90613135565b915050610ca0565b505050565b5f610d27848484611c4f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd4565b610db88533858403611b2c565b506001949350505050565b6005546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610bd4906130c1565b610dff81670de0b6b3a764000061311e565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ba0918590610e7190869061314d565b611b2c565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19166001179055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19169055565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610bd4906130c1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610bd4906130c1565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610bd4906130c1565b806110aa577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110aa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd4565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bd4906130c1565b60128390556013829055601481905580611118838561314d565b611122919061314d565b601155505050565b6005546001600160a01b031633146111545760405162461bcd60e51b8152600401610bd4906130c1565b601080549115156101000261ff0019909216919091179055565b6005545f906001600160a01b0316331461119a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0383166111f05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd4565b306001600160a01b038416036112485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd4565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561128c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b09190613160565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190613177565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461139a5760405162461bcd60e51b8152600401610bd4906130c1565b600e54610100900460ff16156113f25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd4565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610bd4906130c1565b60108054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166115055760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bd4565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b606060048054610b1390613089565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610bd4906130c1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361162e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd4565b6116388282612697565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156116bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd4565b6116ca3385858403611b2c565b5060019392505050565b5f610ba0338484611c4f565b6005546001600160a01b0316331461170a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bd4906130c1565b601683905560178290556018819055806117ac838561314d565b6117b6919061314d565b601555505050565b6005546001600160a01b031633146117e85760405162461bcd60e51b8152600401610bd4906130c1565b6117fa81670de0b6b3a764000061311e565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e30565b6005546001600160a01b031633146118595760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166118af5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610bd4565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad54905f90a250565b6005546001600160a01b031633146119225760405162461bcd60e51b8152600401610bd4906130c1565b600a55565b6005546001600160a01b031633146119515760405162461bcd60e51b8152600401610bd4906130c1565b61196381670de0b6b3a764000061311e565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e30565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610bd4906130c1565b6010805460ff19169055565b6005546001600160a01b031633146119f85760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b038116611a5d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610bd4906130c1565b6040515f90339047908381818185875af1925050503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b50505050565b6001600160a01b038316611b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b038216611bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b038216611c9b5760405162461bcd60e51b8152600401610bd4906131d7565b5f8111611cea5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd4565b6001600160a01b0383165f908152601e602052604090205460ff1680611d2757506001600160a01b0382165f908152601e602052604090205460ff165b15611d8357601054610100900460ff16611d835760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610bd4565b600e5460ff161561224a576005546001600160a01b03848116911614801590611dba57506005546001600160a01b03838116911614155b8015611dce57506001600160a01b03821615155b8015611de557506001600160a01b03821661dead14155b1561224a57600e54610100900460ff16611e7b576001600160a01b0383165f908152601c602052604090205460ff1680611e3657506001600160a01b0382165f908152601c602052604090205460ff165b611e7b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd4565b60105460ff1615611fd4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611efa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611fd457611f0a60044361321a565b325f908152600f6020526040902054108015611f465750611f2c600a4361321a565b6001600160a01b0383165f908152600f6020526040902054105b611fb05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd4565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601f602052604090205460ff16801561201357506001600160a01b0382165f908152601d602052604090205460ff16155b156120ee5760065481111561207b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bd4565b6008546001600160a01b0383165f908152602081905260409020546120a0908361314d565b11156120e95760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b61224a565b6001600160a01b0382165f908152601f602052604090205460ff16801561212d57506001600160a01b0383165f908152601d602052604090205460ff16155b15612197576007548111156120e95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bd4565b6001600160a01b0382165f908152601d602052604090205460ff161580156121d757506001600160a01b0383165f908152601d602052604090205460ff16155b1561224a576008546001600160a01b0383165f90815260208190526040902054612201908361314d565b111561224a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b305f90815260208190526040902054600a54811080159081906122755750600e5462010000900460ff165b8015612284575060095460ff16155b80156122a857506001600160a01b0385165f908152601f602052604090205460ff16155b80156122cc57506001600160a01b0385165f908152601c602052604090205460ff16155b80156122f057506001600160a01b0384165f908152601c602052604090205460ff16155b15612315576009805460ff1916600117905561230a6126ff565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff168061235557506001600160a01b0385165f908152601c602052604090205460ff165b1561235d57505f5b5f8082156125b15761237043600161314d565b600d541015801561239857506001600160a01b0388165f908152601f602052604090205460ff165b156123d45760646123aa87606361311e565b6123b4919061322d565b600b549091506123cf9089906001600160a01b0316836128fd565b612589565b6001600160a01b0387165f908152601f602052604090205460ff1680156123fc57505f601554115b156124b157606460155487612411919061311e565b61241b919061322d565b91506015546017548361242e919061311e565b612438919061322d565b601a5f828254612448919061314d565b909155505060155460165461245d908461311e565b612467919061322d565b60195f828254612477919061314d565b909155505060155460185461248c908461311e565b612496919061322d565b601b5f8282546124a6919061314d565b909155506125899050565b6001600160a01b0388165f908152601f602052604090205460ff1680156124d957505f601154115b15612589576064601154876124ee919061311e565b6124f8919061322d565b91506011546013548361250b919061311e565b612515919061322d565b601a5f828254612525919061314d565b909155505060115460125461253a908461311e565b612544919061322d565b60195f828254612554919061314d565b9091555050601154601454612569908461311e565b612573919061322d565b601b5f828254612583919061314d565b90915550505b811561259a5761259a8830846128fd565b6125a4818361314d565b6125ae908761321a565b95505b6125bc8888886128fd565b60105462010000900460ff161561268d576001600160a01b0387165f908152601c602052604090205460ff1615801561260d57506001600160a01b0388165f908152601c602052604090205460ff16155b801561264b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b801561266557506005546001600160a01b03888116911614155b1561268d576001600160a01b0387165f908152601e60205260409020805460ff191660011790555b5050505050505050565b6001600160a01b0382165f908152601f60205260409020805460ff19168215151790556126c48282612a50565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a54612724919061314d565b61272e919061314d565b905081158061273b575080155b15612744575050565b600a80546127519161311e565b82111561276857600a80546127659161311e565b91505b5f80600283601a548661277b919061311e565b612785919061322d565b61278f919061322d565b90506127a361279e828661321a565b612ab2565b601a54479081905f906127b89060029061322d565b6127c2908761321a565b6019546127cf908561311e565b6127d9919061322d565b90505f6002601a546127eb919061322d565b6127f5908861321a565b601b54612802908661311e565b61280c919061322d565b9050612818818361314d565b612822908461321a565b5f601a8190556019819055601b559250841580159061284057505f83115b1561284f5761284f8584612c68565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612899576040519150601f19603f3d011682016040523d82523d5f602084013e61289e565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146128eb576040519150601f19603f3d011682016040523d82523d5f602084013e6128f0565b606091505b5050505050505050505050565b6001600160a01b0383166129235760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b0382166129495760405162461bcd60e51b8152600401610bd4906131d7565b6001600160a01b0383165f90815260208190526040902054818110156129c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd4565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906129f690849061314d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4291815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ae557612ae56130f6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b85919061324c565b81600181518110612b9857612b986130f6565b60200260200101906001600160a01b031690816001600160a01b031681525050612be3307f000000000000000000000000000000000000000000000000000000000000000084611b2c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612c379085905f90869030904290600401613267565b5f604051808303815f87803b158015612c4e575f80fd5b505af1158015612c60573d5f803e3d5ffd5b505050505050565b612c93307f000000000000000000000000000000000000000000000000000000000000000084611b2c565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612d1a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612d3f91906132d6565b5050505050565b5f6020808352835180828501525f5b81811015612d7157858101830151858201604001528201612d55565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612da5575f80fd5b50565b5f8060408385031215612db9575f80fd5b8235612dc481612d91565b946020939093013593505050565b5f60208284031215612de2575f80fd5b8135612ded81612d91565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e3157612e31612df4565b604052919050565b5f67ffffffffffffffff821115612e5257612e52612df4565b5060051b60200190565b5f82601f830112612e6b575f80fd5b81356020612e80612e7b83612e39565b612e08565b82815260059290921b84018101918181019086841115612e9e575f80fd5b8286015b84811015612eb95780358352918301918301612ea2565b509695505050505050565b5f8060408385031215612ed5575f80fd5b823567ffffffffffffffff80821115612eec575f80fd5b818501915085601f830112612eff575f80fd5b81356020612f0f612e7b83612e39565b82815260059290921b84018101918181019089841115612f2d575f80fd5b948201945b83861015612f54578535612f4581612d91565b82529482019490820190612f32565b96505086013592505080821115612f69575f80fd5b50612f7685828601612e5c565b9150509250929050565b5f805f60608486031215612f92575f80fd5b8335612f9d81612d91565b92506020840135612fad81612d91565b929592945050506040919091013590565b5f60208284031215612fce575f80fd5b5035919050565b8015158114612da5575f80fd5b5f8060408385031215612ff3575f80fd5b8235612ffe81612d91565b9150602083013561300e81612fd5565b809150509250929050565b5f805f6060848603121561302b575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215613052575f80fd5b8135612ded81612fd5565b5f806040838503121561306e575f80fd5b823561307981612d91565b9150602083013561300e81612d91565b600181811c9082168061309d57607f821691505b6020821081036130bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba457610ba461310a565b5f600182016131465761314661310a565b5060010190565b80820180821115610ba457610ba461310a565b5f60208284031215613170575f80fd5b5051919050565b5f60208284031215613187575f80fd5b8151612ded81612fd5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba457610ba461310a565b5f8261324757634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561325c575f80fd5b8151612ded81612d91565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156132b55784516001600160a01b031683529383019391830191600101613290565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156132e8575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212206497b858e42c365cd1eb5b9df4e3406463137cd2f820c27aed07556c4092cd1764736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a0575f3560e01c80638da5cb5b116101de578063c024666811610108578063dd62ed3e1161009d578063f11a24d31161006d578063f11a24d314610aa7578063f2fde38b14610abc578063f5648a4f14610adb578063f637434214610aef575f80fd5b8063dd62ed3e14610a25578063e2f4560514610a69578063e884f26014610a7e578063ee40166e14610a92575f80fd5b8063d0d41fe1116100d8578063d0d41fe1146109b3578063d257b34f146109d2578063d85ba063146109f1578063dc3f0d0f14610a06575f80fd5b8063c02466681461093d578063c17b5b8c1461095c578063c18bc1951461097b578063c876d0b91461099a575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb146108bd578063aa4bde28146108dc578063b62496f5146108f1578063bbc0c7421461091f575f80fd5b80639fccce3214610855578063a0d82dc51461086a578063a457c2d71461087f578063a5ece9411461089e575f80fd5b806392136913116101b957806392136913146107f857806395d89b411461080d5780639a7a23d6146108215780639c3b4fdc14610840575f80fd5b80638da5cb5b1461079d5780638e957101146107ba578063906e9dd0146107d9575f80fd5b80634a62bb65116102ca578063751039fc1161025f57806381e88fc11161022f57806381e88fc1146107365780638366e79a1461075557806388e765ff146107745780638a8c523c14610789575f80fd5b8063751039fc146106cf5780637571336a146106e35780637bce5a04146107025780638095d56414610717575f80fd5b80636a486a8e1161029a5780636a486a8e146106535780636ddd17131461066857806370a0823114610687578063715018a6146106bb575f80fd5b80634a62bb65146105cf57806360d48489146105e857806364e4dcb61461061f57806366d602ae1461063e575f80fd5b80632307b441116103405780633950935111610310578063395093511461053f5780633ad10ef61461055e5780634915c3821461057d57806349bd5a5e1461059c575f80fd5b80632307b441146104c557806323b872dd146104e65780632be32b6114610505578063313ce56714610524575f80fd5b80631694505e1161037b5780631694505e1461043257806318160ddd1461047d5780631a8145bb1461049b5780631f3fed8f146104b0575f80fd5b806306fdde03146103ab578063095ea7b3146103d557806310d5de5314610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610b04565b6040516103cc9190612d46565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612da8565b610b94565b60405190151581526020016103cc565b34801561040f575f80fd5b506103f461041e366004612dd2565b601d6020525f908152604090205460ff1681565b34801561043d575f80fd5b506104657f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103cc565b348015610488575f80fd5b506002545b6040519081526020016103cc565b3480156104a6575f80fd5b5061048d601a5481565b3480156104bb575f80fd5b5061048d60195481565b3480156104d0575f80fd5b506104e46104df366004612ec4565b610baa565b005b3480156104f1575f80fd5b506103f4610500366004612f80565b610d1b565b348015610510575f80fd5b506104e461051f366004612fbe565b610dc3565b34801561052f575f80fd5b50604051601281526020016103cc565b34801561054a575f80fd5b506103f4610559366004612da8565b610e3b565b348015610569575f80fd5b50600c54610465906001600160a01b031681565b348015610588575f80fd5b506104e4610597366004612dd2565b610e76565b3480156105a7575f80fd5b506104657f0000000000000000000000002a746eef8dfdc25b4d3338e7bf3aee437a53d76481565b3480156105da575f80fd5b50600e546103f49060ff1681565b3480156105f3575f80fd5b506103f4610602366004612dd2565b6001600160a01b03165f908152601e602052604090205460ff1690565b34801561062a575f80fd5b506104e4610639366004612dd2565b610ec3565b348015610649575f80fd5b5061048d60075481565b34801561065e575f80fd5b5061048d60155481565b348015610673575f80fd5b50600e546103f49062010000900460ff1681565b348015610692575f80fd5b5061048d6106a1366004612dd2565b6001600160a01b03165f9081526020819052604090205490565b3480156106c6575f80fd5b506104e4610f0d565b3480156106da575f80fd5b506104e4610f80565b3480156106ee575f80fd5b506104e46106fd366004612fe2565b610fea565b34801561070d575f80fd5b5061048d60125481565b348015610722575f80fd5b506104e4610731366004613019565b6110d4565b348015610741575f80fd5b506104e4610750366004613042565b61112a565b348015610760575f80fd5b506103f461076f36600461305d565b61116e565b34801561077f575f80fd5b5061048d60065481565b348015610794575f80fd5b506104e4611370565b3480156107a8575f80fd5b506005546001600160a01b0316610465565b3480156107c5575f80fd5b506104e46107d4366004613042565b611431565b3480156107e4575f80fd5b506104e46107f3366004612dd2565b611477565b348015610803575f80fd5b5061048d60165481565b348015610818575f80fd5b506103bf61154e565b34801561082c575f80fd5b506104e461083b366004612fe2565b61155d565b34801561084b575f80fd5b5061048d60145481565b348015610860575f80fd5b5061048d601b5481565b348015610875575f80fd5b5061048d60185481565b34801561088a575f80fd5b506103f4610899366004612da8565b61163c565b3480156108a9575f80fd5b50600b54610465906001600160a01b031681565b3480156108c8575f80fd5b506103f46108d7366004612da8565b6116d4565b3480156108e7575f80fd5b5061048d60085481565b3480156108fc575f80fd5b506103f461090b366004612dd2565b601f6020525f908152604090205460ff1681565b34801561092a575f80fd5b50600e546103f490610100900460ff1681565b348015610948575f80fd5b506104e4610957366004612fe2565b6116e0565b348015610967575f80fd5b506104e4610976366004613019565b611768565b348015610986575f80fd5b506104e4610995366004612fbe565b6117be565b3480156109a5575f80fd5b506010546103f49060ff1681565b3480156109be575f80fd5b506104e46109cd366004612dd2565b61182f565b3480156109dd575f80fd5b506104e46109ec366004612fbe565b6118f8565b3480156109fc575f80fd5b5061048d60115481565b348015610a11575f80fd5b506104e4610a20366004612fbe565b611927565b348015610a30575f80fd5b5061048d610a3f36600461305d565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610a74575f80fd5b5061048d600a5481565b348015610a89575f80fd5b506104e4611998565b348015610a9d575f80fd5b5061048d600d5481565b348015610ab2575f80fd5b5061048d60135481565b348015610ac7575f80fd5b506104e4610ad6366004612dd2565b6119ce565b348015610ae6575f80fd5b506104e4611ab8565b348015610afa575f80fd5b5061048d60175481565b606060038054610b1390613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3f90613089565b8015610b8a5780601f10610b6157610100808354040283529160200191610b8a565b820191905f5260205f20905b815481529060010190602001808311610b6d57829003601f168201915b5050505050905090565b5f610ba0338484611b2c565b5060015b92915050565b6005546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906130c1565b60405180910390fd5b8051825114610c2e5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bd4565b60c8825110610c9e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bd4565b5f5b8251811015610d16575f838281518110610cbc57610cbc6130f6565b602002602001015190505f838381518110610cd957610cd96130f6565b6020026020010151670de0b6b3a7640000610cf4919061311e565b9050610d01338383611c4f565b50508080610d0e90613135565b915050610ca0565b505050565b5f610d27848484611c4f565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610dab5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bd4565b610db88533858403611b2c565b506001949350505050565b6005546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610bd4906130c1565b610dff81670de0b6b3a764000061311e565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610ba0918590610e7190869061314d565b611b2c565b6005546001600160a01b03163314610ea05760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19166001179055565b6005546001600160a01b03163314610eed5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b03165f908152601e60205260409020805460ff19169055565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610bd4906130c1565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610bd4906130c1565b600e805460ff199081169091556010805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c905f90a1565b6005546001600160a01b031633146110145760405162461bcd60e51b8152600401610bd4906130c1565b806110aa577f0000000000000000000000002a746eef8dfdc25b4d3338e7bf3aee437a53d7646001600160a01b0316826001600160a01b0316036110aa5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bd4565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110fe5760405162461bcd60e51b8152600401610bd4906130c1565b60128390556013829055601481905580611118838561314d565b611122919061314d565b601155505050565b6005546001600160a01b031633146111545760405162461bcd60e51b8152600401610bd4906130c1565b601080549115156101000261ff0019909216919091179055565b6005545f906001600160a01b0316331461119a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0383166111f05760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bd4565b306001600160a01b038416036112485760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bd4565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa15801561128c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b09190613160565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af1158015611300573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113249190613177565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461139a5760405162461bcd60e51b8152600401610bd4906130c1565b600e54610100900460ff16156113f25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bd4565b600e805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb7905f90a1565b6005546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610bd4906130c1565b60108054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146114a15760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166115055760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bd4565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a9905f90a250565b606060048054610b1390613089565b6005546001600160a01b031633146115875760405162461bcd60e51b8152600401610bd4906130c1565b7f0000000000000000000000002a746eef8dfdc25b4d3338e7bf3aee437a53d7646001600160a01b0316826001600160a01b03160361162e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bd4565b6116388282612697565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156116bd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bd4565b6116ca3385858403611b2c565b5060019392505050565b5f610ba0338484611c4f565b6005546001600160a01b0316331461170a5760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0382165f818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146117925760405162461bcd60e51b8152600401610bd4906130c1565b601683905560178290556018819055806117ac838561314d565b6117b6919061314d565b601555505050565b6005546001600160a01b031633146117e85760405162461bcd60e51b8152600401610bd4906130c1565b6117fa81670de0b6b3a764000061311e565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e30565b6005546001600160a01b031633146118595760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b0381166118af5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610bd4565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad54905f90a250565b6005546001600160a01b031633146119225760405162461bcd60e51b8152600401610bd4906130c1565b600a55565b6005546001600160a01b031633146119515760405162461bcd60e51b8152600401610bd4906130c1565b61196381670de0b6b3a764000061311e565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e30565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610bd4906130c1565b6010805460ff19169055565b6005546001600160a01b031633146119f85760405162461bcd60e51b8152600401610bd4906130c1565b6001600160a01b038116611a5d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ae25760405162461bcd60e51b8152600401610bd4906130c1565b6040515f90339047908381818185875af1925050503d805f8114611b21576040519150601f19603f3d011682016040523d82523d5f602084013e611b26565b606091505b50505050565b6001600160a01b038316611b8e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b038216611bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c755760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b038216611c9b5760405162461bcd60e51b8152600401610bd4906131d7565b5f8111611cea5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bd4565b6001600160a01b0383165f908152601e602052604090205460ff1680611d2757506001600160a01b0382165f908152601e602052604090205460ff165b15611d8357601054610100900460ff16611d835760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610bd4565b600e5460ff161561224a576005546001600160a01b03848116911614801590611dba57506005546001600160a01b03838116911614155b8015611dce57506001600160a01b03821615155b8015611de557506001600160a01b03821661dead14155b1561224a57600e54610100900460ff16611e7b576001600160a01b0383165f908152601c602052604090205460ff1680611e3657506001600160a01b0382165f908152601c602052604090205460ff165b611e7b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bd4565b60105460ff1615611fd4577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611efa57507f0000000000000000000000002a746eef8dfdc25b4d3338e7bf3aee437a53d7646001600160a01b0316826001600160a01b031614155b15611fd457611f0a60044361321a565b325f908152600f6020526040902054108015611f465750611f2c600a4361321a565b6001600160a01b0383165f908152600f6020526040902054105b611fb05760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bd4565b325f908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383165f908152601f602052604090205460ff16801561201357506001600160a01b0382165f908152601d602052604090205460ff16155b156120ee5760065481111561207b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bd4565b6008546001600160a01b0383165f908152602081905260409020546120a0908361314d565b11156120e95760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b61224a565b6001600160a01b0382165f908152601f602052604090205460ff16801561212d57506001600160a01b0383165f908152601d602052604090205460ff16155b15612197576007548111156120e95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bd4565b6001600160a01b0382165f908152601d602052604090205460ff161580156121d757506001600160a01b0383165f908152601d602052604090205460ff16155b1561224a576008546001600160a01b0383165f90815260208190526040902054612201908361314d565b111561224a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bd4565b305f90815260208190526040902054600a54811080159081906122755750600e5462010000900460ff165b8015612284575060095460ff16155b80156122a857506001600160a01b0385165f908152601f602052604090205460ff16155b80156122cc57506001600160a01b0385165f908152601c602052604090205460ff16155b80156122f057506001600160a01b0384165f908152601c602052604090205460ff16155b15612315576009805460ff1916600117905561230a6126ff565b6009805460ff191690555b6001600160a01b0385165f908152601c602052604090205460019060ff168061235557506001600160a01b0385165f908152601c602052604090205460ff165b1561235d57505f5b5f8082156125b15761237043600161314d565b600d541015801561239857506001600160a01b0388165f908152601f602052604090205460ff165b156123d45760646123aa87606361311e565b6123b4919061322d565b600b549091506123cf9089906001600160a01b0316836128fd565b612589565b6001600160a01b0387165f908152601f602052604090205460ff1680156123fc57505f601554115b156124b157606460155487612411919061311e565b61241b919061322d565b91506015546017548361242e919061311e565b612438919061322d565b601a5f828254612448919061314d565b909155505060155460165461245d908461311e565b612467919061322d565b60195f828254612477919061314d565b909155505060155460185461248c908461311e565b612496919061322d565b601b5f8282546124a6919061314d565b909155506125899050565b6001600160a01b0388165f908152601f602052604090205460ff1680156124d957505f601154115b15612589576064601154876124ee919061311e565b6124f8919061322d565b91506011546013548361250b919061311e565b612515919061322d565b601a5f828254612525919061314d565b909155505060115460125461253a908461311e565b612544919061322d565b60195f828254612554919061314d565b9091555050601154601454612569908461311e565b612573919061322d565b601b5f828254612583919061314d565b90915550505b811561259a5761259a8830846128fd565b6125a4818361314d565b6125ae908761321a565b95505b6125bc8888886128fd565b60105462010000900460ff161561268d576001600160a01b0387165f908152601c602052604090205460ff1615801561260d57506001600160a01b0388165f908152601c602052604090205460ff16155b801561264b57507f0000000000000000000000002a746eef8dfdc25b4d3338e7bf3aee437a53d7646001600160a01b0316876001600160a01b031614155b801561266557506005546001600160a01b03888116911614155b1561268d576001600160a01b0387165f908152601e60205260409020805460ff191660011790555b5050505050505050565b6001600160a01b0382165f908152601f60205260409020805460ff19168215151790556126c48282612a50565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab905f90a35050565b305f9081526020819052604081205490505f601b54601954601a54612724919061314d565b61272e919061314d565b905081158061273b575080155b15612744575050565b600a80546127519161311e565b82111561276857600a80546127659161311e565b91505b5f80600283601a548661277b919061311e565b612785919061322d565b61278f919061322d565b90506127a361279e828661321a565b612ab2565b601a54479081905f906127b89060029061322d565b6127c2908761321a565b6019546127cf908561311e565b6127d9919061322d565b90505f6002601a546127eb919061322d565b6127f5908861321a565b601b54612802908661311e565b61280c919061322d565b9050612818818361314d565b612822908461321a565b5f601a8190556019819055601b559250841580159061284057505f83115b1561284f5761284f8584612c68565b600c546040516001600160a01b039091169082905f81818185875af1925050503d805f8114612899576040519150601f19603f3d011682016040523d82523d5f602084013e61289e565b606091505b5050600b546040519197506001600160a01b03169047905f81818185875af1925050503d805f81146128eb576040519150601f19603f3d011682016040523d82523d5f602084013e6128f0565b606091505b5050505050505050505050565b6001600160a01b0383166129235760405162461bcd60e51b8152600401610bd490613192565b6001600160a01b0382166129495760405162461bcd60e51b8152600401610bd4906131d7565b6001600160a01b0383165f90815260208190526040902054818110156129c05760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bd4565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906129f690849061314d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4291815260200190565b60405180910390a350505050565b6001600160a01b0382165f818152601d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612ae557612ae56130f6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b85919061324c565b81600181518110612b9857612b986130f6565b60200260200101906001600160a01b031690816001600160a01b031681525050612be3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612c379085905f90869030904290600401613267565b5f604051808303815f87803b158015612c4e575f80fd5b505af1158015612c60573d5f803e3d5ffd5b505050505050565b612c93307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b2c565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612d1a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612d3f91906132d6565b5050505050565b5f6020808352835180828501525f5b81811015612d7157858101830151858201604001528201612d55565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612da5575f80fd5b50565b5f8060408385031215612db9575f80fd5b8235612dc481612d91565b946020939093013593505050565b5f60208284031215612de2575f80fd5b8135612ded81612d91565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e3157612e31612df4565b604052919050565b5f67ffffffffffffffff821115612e5257612e52612df4565b5060051b60200190565b5f82601f830112612e6b575f80fd5b81356020612e80612e7b83612e39565b612e08565b82815260059290921b84018101918181019086841115612e9e575f80fd5b8286015b84811015612eb95780358352918301918301612ea2565b509695505050505050565b5f8060408385031215612ed5575f80fd5b823567ffffffffffffffff80821115612eec575f80fd5b818501915085601f830112612eff575f80fd5b81356020612f0f612e7b83612e39565b82815260059290921b84018101918181019089841115612f2d575f80fd5b948201945b83861015612f54578535612f4581612d91565b82529482019490820190612f32565b96505086013592505080821115612f69575f80fd5b50612f7685828601612e5c565b9150509250929050565b5f805f60608486031215612f92575f80fd5b8335612f9d81612d91565b92506020840135612fad81612d91565b929592945050506040919091013590565b5f60208284031215612fce575f80fd5b5035919050565b8015158114612da5575f80fd5b5f8060408385031215612ff3575f80fd5b8235612ffe81612d91565b9150602083013561300e81612fd5565b809150509250929050565b5f805f6060848603121561302b575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215613052575f80fd5b8135612ded81612fd5565b5f806040838503121561306e575f80fd5b823561307981612d91565b9150602083013561300e81612d91565b600181811c9082168061309d57607f821691505b6020821081036130bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba457610ba461310a565b5f600182016131465761314661310a565b5060010190565b80820180821115610ba457610ba461310a565b5f60208284031215613170575f80fd5b5051919050565b5f60208284031215613187575f80fd5b8151612ded81612fd5565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba457610ba461310a565b5f8261324757634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561325c575f80fd5b8151612ded81612d91565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156132b55784516001600160a01b031683529383019391830191600101613290565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156132e8575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212206497b858e42c365cd1eb5b9df4e3406463137cd2f820c27aed07556c4092cd1764736f6c63430008140033

Deployed Bytecode Sourcemap

10460:17279:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5098:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6012:169;;;;;;;;;;-1:-1:-1;6012:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6012:169:0;1023:187:1;11906:64:0;;;;;;;;;;-1:-1:-1;11906:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10620:43;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1649:32:1;;;1631:51;;1619:2;1604:18;10620:43:0;1467:221:1;5419:108:0;;;;;;;;;;-1:-1:-1;5507:12:0;;5419:108;;;1839:25:1;;;1827:2;1812:18;5419:108:0;1693:177:1;11684:33:0;;;;;;;;;;;;;;;;11644;;;;;;;;;;;;;;;;16425:617;;;;;;;;;;-1:-1:-1;16425:617:0;;;;;:::i;:::-;;:::i;:::-;;6189:492;;;;;;;;;;-1:-1:-1;6189:492:0;;;;;:::i;:::-;;:::i;15476:165::-;;;;;;;;;;-1:-1:-1;15476:165:0;;;;;:::i;:::-;;:::i;5318:93::-;;;;;;;;;;-1:-1:-1;5318:93:0;;5401:2;5150:36:1;;5138:2;5123:18;5318:93:0;5008:184:1;6689:215:0;;;;;;;;;;-1:-1:-1;6689:215:0;;;;;:::i;:::-;;:::i;10825:25::-;;;;;;;;;;-1:-1:-1;10825:25:0;;;;-1:-1:-1;;;;;10825:25:0;;;27160:113;;;;;;;;;;-1:-1:-1;27160:113:0;;;;;:::i;:::-;;:::i;10670:38::-;;;;;;;;;;;;;;;10940:33;;;;;;;;;;-1:-1:-1;10940:33:0;;;;;;;;27414:121;;;;;;;;;;-1:-1:-1;27414:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;27506:21:0;27482:4;27506:21;;;:10;:21;;;;;;;;;27414:121;27285:117;;;;;;;;;;-1:-1:-1;27285:117:0;;;;;:::i;:::-;;:::i;10546:28::-;;;;;;;;;;;;;;;;11497;;;;;;;;;;;;;;;;11020:31;;;;;;;;;;-1:-1:-1;11020:31:0;;;;;;;;;;;5535:127;;;;;;;;;;-1:-1:-1;5535:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;5636:18:0;5609:7;5636:18;;;;;;;;;;;;5535:127;9179:150;;;;;;;;;;;;;:::i;15142:154::-;;;;;;;;;;;;;:::i;17054:267::-;;;;;;;;;;-1:-1:-1;17054:267:0;;;;;:::i;:::-;;:::i;11388:30::-;;;;;;;;;;;;;;;;17839:301;;;;;;;;;;-1:-1:-1;17839:301:0;;;;;:::i;:::-;;:::i;27543:93::-;;;;;;;;;;-1:-1:-1;27543:93:0;;;;;:::i;:::-;;:::i;25920:456::-;;;;;;;;;;-1:-1:-1;25920:456:0;;;;;:::i;:::-;;:::i;10512:27::-;;;;;;;;;;;;;;;;14837:249;;;;;;;;;;;;;:::i;8965:79::-;;;;;;;;;;-1:-1:-1;9030:6:0;;-1:-1:-1;;;;;9030:6:0;8965:79;;27644:92;;;;;;;;;;-1:-1:-1;27644:92:0;;;;;:::i;:::-;;:::i;26614:289::-;;;;;;;;;;-1:-1:-1;26614:289:0;;;;;:::i;:::-;;:::i;11532:31::-;;;;;;;;;;;;;;;;5206:104;;;;;;;;;;;;;:::i;17329:246::-;;;;;;;;;;-1:-1:-1;17329:246:0;;;;;:::i;:::-;;:::i;11462:24::-;;;;;;;;;;;;;;;;11724:27;;;;;;;;;;;;;;;;11608:25;;;;;;;;;;;;;;;;6912:413;;;;;;;;;;-1:-1:-1;6912:413:0;;;;;:::i;:::-;;:::i;10787:31::-;;;;;;;;;;-1:-1:-1;10787:31:0;;;;-1:-1:-1;;;;;10787:31:0;;;5670:175;;;;;;;;;;-1:-1:-1;5670:175:0;;;;;:::i;:::-;;:::i;10581:30::-;;;;;;;;;;;;;;;;12181:58;;;;;;;;;;-1:-1:-1;12181:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10980:33;;;;;;;;;;-1:-1:-1;10980:33:0;;;;;;;;;;;18466:182;;;;;;;;;;-1:-1:-1;18466:182:0;;;;;:::i;:::-;;:::i;18148:310::-;;;;;;;;;;-1:-1:-1;18148:310:0;;;;;:::i;:::-;;:::i;15830:177::-;;;;;;;;;;-1:-1:-1;15830:177:0;;;;;:::i;:::-;;:::i;11243:39::-;;;;;;;;;;-1:-1:-1;11243:39:0;;;;;;;;26911:241;;;;;;;;;;-1:-1:-1;26911:241:0;;;;;:::i;:::-;;:::i;16077:121::-;;;;;;;;;;-1:-1:-1;16077:121:0;;;;;:::i;:::-;;:::i;11354:27::-;;;;;;;;;;;;;;;;15653:169;;;;;;;;;;-1:-1:-1;15653:169:0;;;;;:::i;:::-;;:::i;5853:151::-;;;;;;;;;;-1:-1:-1;5853:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5969:18:0;;;5942:7;5969:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5853:151;10745:33;;;;;;;;;;;;;;;;15366:98;;;;;;;;;;;;;:::i;10861:37::-;;;;;;;;;;;;;;;;11425:30;;;;;;;;;;;;;;;;9337:244;;;;;;;;;;-1:-1:-1;9337:244:0;;;;;:::i;:::-;;:::i;26446:160::-;;;;;;;;;;;;;:::i;11570:31::-;;;;;;;;;;;;;;;;5098:100;5152:13;5185:5;5178:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5098:100;:::o;6012:169::-;6095:4;6112:39;1327:10;6135:7;6144:6;6112:8;:39::i;:::-;-1:-1:-1;6169:4:0;6012:169;;;;;:::o;16425:617::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;;;;;;;;;16567:15:::1;:22;16549:7;:14;:40;16541:83;;;::::0;-1:-1:-1;;;16541:83:0;;7823:2:1;16541:83:0::1;::::0;::::1;7805:21:1::0;7862:2;7842:18;;;7835:30;7901:32;7881:18;;;7874:60;7951:18;;16541:83:0::1;7621:354:1::0;16541:83:0::1;16660:3;16643:7;:14;:20;16635:87;;;::::0;-1:-1:-1;;;16635:87:0;;8182:2:1;16635:87:0::1;::::0;::::1;8164:21:1::0;8221:2;8201:18;;;8194:30;8260:34;8240:18;;;8233:62;-1:-1:-1;;;8311:18:1;;;8304:52;8373:19;;16635:87:0::1;7980:418:1::0;16635:87:0::1;16835:9;16831:204;16854:7;:14;16850:1;:18;16831:204;;;16889:14;16906:7;16914:1;16906:10;;;;;;;;:::i;:::-;;;;;;;16889:27;;16931:14;16948:15;16964:1;16948:18;;;;;;;;:::i;:::-;;;;;;;16967:4;16948:23;;;;:::i;:::-;16931:40;;16986:37;16996:10;17008:6;17016;16986:9;:37::i;:::-;16874:161;;16870:3;;;;;:::i;:::-;;;;16831:204;;;;16425:617:::0;;:::o;6189:492::-;6329:4;6346:36;6356:6;6364:9;6375:6;6346:9;:36::i;:::-;-1:-1:-1;;;;;6422:19:0;;6395:24;6422:19;;;:11;:19;;;;;;;;1327:10;6422:33;;;;;;;;6474:26;;;;6466:79;;;;-1:-1:-1;;;6466:79:0;;9182:2:1;6466:79:0;;;9164:21:1;9221:2;9201:18;;;9194:30;9260:34;9240:18;;;9233:62;-1:-1:-1;;;9311:18:1;;;9304:38;9359:19;;6466:79:0;8980:404:1;6466:79:0;6581:57;6590:6;1327:10;6631:6;6612:16;:25;6581:8;:57::i;:::-;-1:-1:-1;6669:4:0;;6189:492;-1:-1:-1;;;;6189:492:0:o;15476:165::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;15567:17:::1;:6:::0;15577::::1;15567:17;:::i;:::-;15552:12;:32:::0;;;15600:33:::1;::::0;1839:25:1;;;15600:33:0::1;::::0;1827:2:1;1812:18;15600:33:0::1;;;;;;;;15476:165:::0;:::o;6689:215::-;1327:10;6777:4;6826:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6826:34:0;;;;;;;;;;6777:4;;6794:80;;6817:7;;6826:47;;6863:10;;6826:47;:::i;:::-;6794:8;:80::i;27160:113::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27237:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;27237:28:0::1;27261:4;27237:28;::::0;;27160:113::o;27285:117::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27365:21:0::1;27389:5;27365:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;27365:29:0::1;::::0;;27285:117::o;9179:150::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;9272:6:::1;::::0;9251:40:::1;::::0;9288:1:::1;::::0;-1:-1:-1;;;;;9272:6:0::1;::::0;9251:40:::1;::::0;9288:1;;9251:40:::1;9302:6;:19:::0;;-1:-1:-1;;;;;;9302:19:0::1;::::0;;9179:150::o;15142:154::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;15196:14:::1;:22:::0;;-1:-1:-1;;15196:22:0;;::::1;::::0;;;15229:20:::1;:28:::0;;;;::::1;::::0;;15273:15:::1;::::0;::::1;::::0;15213:5:::1;::::0;15273:15:::1;15142:154::o:0;17054:267::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;17150:4:::1;17146:111;;17188:13;-1:-1:-1::0;;;;;17178:23:0::1;:6;-1:-1:-1::0;;;;;17178:23:0::1;::::0;17170:75:::1;;;::::0;-1:-1:-1;;;17170:75:0;;9721:2:1;17170:75:0::1;::::0;::::1;9703:21:1::0;9760:2;9740:18;;;9733:30;9799:34;9779:18;;;9772:62;-1:-1:-1;;;9850:18:1;;;9843:37;9897:19;;17170:75:0::1;9519:403:1::0;17170:75:0::1;-1:-1:-1::0;;;;;17267:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17267:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17054:267::o;17839:301::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;17955:15:::1;:31:::0;;;17997:15:::1;:31:::0;;;18039:9:::1;:19:::0;;;18051:7;18084:33:::1;18015:13:::0;17973;18084:33:::1;:::i;:::-;:45;;;;:::i;:::-;18069:12;:60:::0;-1:-1:-1;;;17839:301:0:o;27543:93::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;27607:12:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;27607:21:0;;::::1;::::0;;;::::1;::::0;;27543:93::o;25920:456::-;9092:6;;26007:10;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26038:20:0;::::1;26030:59;;;::::0;-1:-1:-1;;;26030:59:0;;10129:2:1;26030:59:0::1;::::0;::::1;10111:21:1::0;10168:2;10148:18;;;10141:30;10207:28;10187:18;;;10180:56;10253:18;;26030:59:0::1;9927:350:1::0;26030:59:0::1;26126:4;-1:-1:-1::0;;;;;26108:23:0;::::1;::::0;26100:64:::1;;;::::0;-1:-1:-1;;;26100:64:0;;10484:2:1;26100:64:0::1;::::0;::::1;10466:21:1::0;10523:2;10503:18;;;10496:30;10562;10542:18;;;10535:58;10610:18;;26100:64:0::1;10282:352:1::0;26100:64:0::1;26202:39;::::0;-1:-1:-1;;;26202:39:0;;26235:4:::1;26202:39;::::0;::::1;1631:51:1::0;26175:24:0::1;::::0;-1:-1:-1;;;;;26202:24:0;::::1;::::0;::::1;::::0;1604:18:1;;26202:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26260:46;::::0;-1:-1:-1;;;26260:46:0;;-1:-1:-1;;;;;11020:32:1;;;26260:46:0::1;::::0;::::1;11002:51:1::0;11069:18;;;11062:34;;;26175:66:0;;-1:-1:-1;26260:23:0;;::::1;::::0;::::1;::::0;10975:18:1;;26260:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26322;::::0;;-1:-1:-1;;;;;11020:32:1;;11002:51;;11084:2;11069:18;;11062:34;;;26252:54:0;;-1:-1:-1;26322:46:0::1;::::0;10975:18:1;26322:46:0::1;;;;;;;26019:357;25920:456:::0;;;;:::o;14837:249::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;14901:13:::1;::::0;::::1;::::0;::::1;;;14900:14;14892:50;;;::::0;-1:-1:-1;;;14892:50:0;;11559:2:1;14892:50:0::1;::::0;::::1;11541:21:1::0;11598:2;11578:18;;;11571:30;11637:25;11617:18;;;11610:53;11680:18;;14892:50:0::1;11357:347:1::0;14892:50:0::1;14953:13;:20:::0;;-1:-1:-1;;14984:18:0;;;;;15034:12:::1;15013:18;:33:::0;15062:16:::1;::::0;::::1;::::0;-1:-1:-1;;15062:16:0::1;14837:249::o:0;27644:92::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;27711:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27711:17:0;;::::1;::::0;;;::::1;::::0;;27644:92::o;26614:289::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26708:31:0;::::1;26700:81;;;::::0;-1:-1:-1;;;26700:81:0;;11911:2:1;26700:81:0::1;::::0;::::1;11893:21:1::0;11950:2;11930:18;;;11923:30;11989:34;11969:18;;;11962:62;-1:-1:-1;;;12040:18:1;;;12033:35;12085:19;;26700:81:0::1;11709:401:1::0;26700:81:0::1;26792:16;:45:::0;;-1:-1:-1;;;;;;26792:45:0::1;-1:-1:-1::0;;;;;26792:45:0;::::1;::::0;;::::1;::::0;;;26853:42:::1;::::0;::::1;::::0;-1:-1:-1;;26853:42:0::1;26614:289:::0;:::o;5206:104::-;5262:13;5295:7;5288:14;;;;;:::i;17329:246::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;17438:13:::1;-1:-1:-1::0;;;;;17430:21:0::1;:4;-1:-1:-1::0;;;;;17430:21:0::1;::::0;17422:91:::1;;;::::0;-1:-1:-1;;;17422:91:0;;12317:2:1;17422:91:0::1;::::0;::::1;12299:21:1::0;12356:2;12336:18;;;12329:30;12395:34;12375:18;;;12368:62;12466:27;12446:18;;;12439:55;12511:19;;17422:91:0::1;12115:421:1::0;17422:91:0::1;17526:41;17555:4;17561:5;17526:28;:41::i;:::-;17329:246:::0;;:::o;6912:413::-;1327:10;7005:4;7049:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7049:34:0;;;;;;;;;;7102:35;;;;7094:85;;;;-1:-1:-1;;;7094:85:0;;12743:2:1;7094:85:0;;;12725:21:1;12782:2;12762:18;;;12755:30;12821:34;12801:18;;;12794:62;-1:-1:-1;;;12872:18:1;;;12865:35;12917:19;;7094:85:0;12541:401:1;7094:85:0;7215:67;1327:10;7238:7;7266:15;7247:16;:34;7215:8;:67::i;:::-;-1:-1:-1;7313:4:0;;6912:413;-1:-1:-1;;;6912:413:0:o;5670:175::-;5756:4;5773:42;1327:10;5797:9;5808:6;5773:9;:42::i;18466:182::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18551:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18551:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18606:34;;1163:41:1;;;18606:34:0::1;::::0;1136:18:1;18606:34:0::1;;;;;;;18466:182:::0;;:::o;18148:310::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;18265:16:::1;:32:::0;;;18308:16:::1;:32:::0;;;18351:10:::1;:20:::0;;;18364:7;18400:35:::1;18327:13:::0;18284;18400:35:::1;:::i;:::-;:48;;;;:::i;:::-;18384:13;:64:::0;-1:-1:-1;;;18148:310:0:o;15830:177::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;15927:17:::1;:6:::0;15937::::1;15927:17;:::i;:::-;15909:15;:35:::0;;;15960:39:::1;::::0;1839:25:1;;;15960:39:0::1;::::0;1827:2:1;1812:18;15960:39:0::1;1693:177:1::0;26911:241:0;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26993:25:0;::::1;26985:69;;;::::0;-1:-1:-1;;;26985:69:0;;13149:2:1;26985:69:0::1;::::0;::::1;13131:21:1::0;13188:2;13168:18;;;13161:30;13227:33;13207:18;;;13200:61;13278:18;;26985:69:0::1;12947:355:1::0;26985:69:0::1;27065:10;:33:::0;;-1:-1:-1;;;;;;27065:33:0::1;-1:-1:-1::0;;;;;27065:33:0;::::1;::::0;;::::1;::::0;;;27114:30:::1;::::0;::::1;::::0;-1:-1:-1;;27114:30:0::1;26911:241:::0;:::o;16077:121::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;16161:18:::1;:30:::0;16077:121::o;15653:169::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;15746:17:::1;:6:::0;15756::::1;15746:17;:::i;:::-;15730:13;:33:::0;;;15779:35:::1;::::0;1839:25:1;;;15779:35:0::1;::::0;1827:2:1;1812:18;15779:35:0::1;1693:177:1::0;15366:98:0;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;15428:20:::1;:28:::0;;-1:-1:-1;;15428:28:0::1;::::0;;15366:98::o;9337:244::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9426:22:0;::::1;9418:73;;;::::0;-1:-1:-1;;;9418:73:0;;13509:2:1;9418:73:0::1;::::0;::::1;13491:21:1::0;13548:2;13528:18;;;13521:30;13587:34;13567:18;;;13560:62;-1:-1:-1;;;13638:18:1;;;13631:36;13684:19;;9418:73:0::1;13307:402:1::0;9418:73:0::1;9528:6;::::0;9507:38:::1;::::0;-1:-1:-1;;;;;9507:38:0;;::::1;::::0;9528:6:::1;::::0;9507:38:::1;::::0;9528:6:::1;::::0;9507:38:::1;9556:6;:17:::0;;-1:-1:-1;;;;;;9556:17:0::1;-1:-1:-1::0;;;;;9556:17:0;;;::::1;::::0;;;::::1;::::0;;9337:244::o;26446:160::-;9092:6;;-1:-1:-1;;;;;9092:6:0;1327:10;9092:22;9084:67;;;;-1:-1:-1;;;9084:67:0;;;;;;;:::i;:::-;26540:58:::1;::::0;26504:12:::1;::::0;26548:10:::1;::::0;26572:21:::1;::::0;26504:12;26540:58;26504:12;26540:58;26572:21;26548:10;26540:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26446:160:0:o;8254:380::-;-1:-1:-1;;;;;8390:19:0;;8382:68;;;;-1:-1:-1;;;8382:68:0;;14126:2:1;8382:68:0;;;14108:21:1;14165:2;14145:18;;;14138:30;14204:34;14184:18;;;14177:62;-1:-1:-1;;;14255:18:1;;;14248:34;14299:19;;8382:68:0;13924:400:1;8382:68:0;-1:-1:-1;;;;;8469:21:0;;8461:68;;;;-1:-1:-1;;;8461:68:0;;14531:2:1;8461:68:0;;;14513:21:1;14570:2;14550:18;;;14543:30;14609:34;14589:18;;;14582:62;-1:-1:-1;;;14660:18:1;;;14653:32;14702:19;;8461:68:0;14329:398:1;8461:68:0;-1:-1:-1;;;;;8542:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8594:32;;1839:25:1;;;8594:32:0;;1812:18:1;8594:32:0;;;;;;;8254:380;;;:::o;18656:4662::-;-1:-1:-1;;;;;18756:18:0;;18748:68;;;;-1:-1:-1;;;18748:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18835:16:0;;18827:64;;;;-1:-1:-1;;;18827:64:0;;;;;;;:::i;:::-;18919:1;18910:6;:10;18902:52;;;;-1:-1:-1;;;18902:52:0;;15744:2:1;18902:52:0;;;15726:21:1;15783:2;15763:18;;;15756:30;15822:31;15802:18;;;15795:59;15871:18;;18902:52:0;15542:353:1;18902:52:0;-1:-1:-1;;;;;18970:16:0;;;;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;18990:14:0;;;;;;:10;:14;;;;;;;;18970:34;18967:117;;;19028:12;;;;;;;19020:52;;;;-1:-1:-1;;;19020:52:0;;16102:2:1;19020:52:0;;;16084:21:1;16141:2;16121:18;;;16114:30;16180:29;16160:18;;;16153:57;16227:18;;19020:52:0;15900:351:1;19020:52:0;19117:14;;;;19114:1850;;;9030:6;;-1:-1:-1;;;;;19151:15:0;;;9030:6;;19151:15;;;;:32;;-1:-1:-1;9030:6:0;;-1:-1:-1;;;;;19170:13:0;;;9030:6;;19170:13;;19151:32;:52;;;;-1:-1:-1;;;;;;19187:16:0;;;;19151:52;:77;;;;-1:-1:-1;;;;;;19207:21:0;;19221:6;19207:21;;19151:77;19147:1806;;;19252:13;;;;;;;19248:148;;-1:-1:-1;;;;;19297:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19326:23:0;;;;;;:19;:23;;;;;;;;19297:52;19289:87;;;;-1:-1:-1;;;19289:87:0;;16458:2:1;19289:87:0;;;16440:21:1;16497:2;16477:18;;;16470:30;-1:-1:-1;;;16516:18:1;;;16509:52;16578:18;;19289:87:0;16256:346:1;19289:87:0;19570:20;;;;19566:520;;;19632:15;-1:-1:-1;;;;;19618:30:0;:2;-1:-1:-1;;;;;19618:30:0;;;:62;;;;;19666:13;-1:-1:-1;;;;;19652:28:0;:2;-1:-1:-1;;;;;19652:28:0;;;19618:62;19614:453;;;19758:16;19773:1;19758:12;:16;:::i;:::-;19745:9;19716:39;;;;:28;:39;;;;;;:58;:114;;;;-1:-1:-1;19813:17:0;19828:2;19813:12;:17;:::i;:::-;-1:-1:-1;;;;;19778:32:0;;;;;;:28;:32;;;;;;:52;19716:114;19708:180;;;;-1:-1:-1;;;19708:180:0;;16942:2:1;19708:180:0;;;16924:21:1;16981:2;16961:18;;;16954:30;17020:34;17000:18;;;16993:62;-1:-1:-1;;;17071:18:1;;;17064:51;17132:19;;19708:180:0;16740:417:1;19708:180:0;19944:9;19915:39;;;;:28;:39;;;;;;19957:12;19915:54;;;;-1:-1:-1;;;;;19996:32:0;;;;;;:47;19614:453;-1:-1:-1;;;;;20155:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;20191:35:0;;;;;;:31;:35;;;;;;;;20190:36;20155:71;20151:787;;;20273:12;;20263:6;:22;;20255:75;;;;-1:-1:-1;;;20255:75:0;;17364:2:1;20255:75:0;;;17346:21:1;17403:2;17383:18;;;17376:30;17442:34;17422:18;;;17415:62;-1:-1:-1;;;17493:18:1;;;17486:38;17541:19;;20255:75:0;17162:404:1;20255:75:0;20391:15;;-1:-1:-1;;;;;5636:18:0;;5609:7;5636:18;;;;;;;;;;;20365:22;;:6;:22;:::i;:::-;:41;;20357:78;;;;-1:-1:-1;;;20357:78:0;;17773:2:1;20357:78:0;;;17755:21:1;17812:2;17792:18;;;17785:30;-1:-1:-1;;;17831:18:1;;;17824:54;17895:18;;20357:78:0;17571:348:1;20357:78:0;20151:787;;;-1:-1:-1;;;;;20512:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;20546:37:0;;;;;;:31;:37;;;;;;;;20545:38;20512:71;20508:430;;;20630:13;;20620:6;:23;;20612:78;;;;-1:-1:-1;;;20612:78:0;;18126:2:1;20612:78:0;;;18108:21:1;18165:2;18145:18;;;18138:30;18204:34;18184:18;;;18177:62;-1:-1:-1;;;18255:18:1;;;18248:40;18305:19;;20612:78:0;17924:406:1;20508:430:0;-1:-1:-1;;;;;20739:35:0;;;;;;:31;:35;;;;;;;;20738:36;:78;;;;-1:-1:-1;;;;;;20779:37:0;;;;;;:31;:37;;;;;;;;20778:38;20738:78;20734:204;;;20874:15;;-1:-1:-1;;;;;5636:18:0;;5609:7;5636:18;;;;;;;;;;;20848:22;;:6;:22;:::i;:::-;:41;;20840:78;;;;-1:-1:-1;;;20840:78:0;;17773:2:1;20840:78:0;;;17755:21:1;17812:2;17792:18;;;17785:30;-1:-1:-1;;;17831:18:1;;;17824:54;17895:18;;20840:78:0;17571:348:1;20840:78:0;21025:4;20976:28;5636:18;;;;;;;;;;;21091;;21067:42;;;;;;;21125:22;;-1:-1:-1;21136:11:0;;;;;;;21125:22;:35;;;;-1:-1:-1;21152:8:0;;;;21151:9;21125:35;:71;;;;-1:-1:-1;;;;;;21165:31:0;;;;;;:25;:31;;;;;;;;21164:32;21125:71;:101;;;;-1:-1:-1;;;;;;21201:25:0;;;;;;:19;:25;;;;;;;;21200:26;21125:101;:129;;;;-1:-1:-1;;;;;;21231:23:0;;;;;;:19;:23;;;;;;;;21230:24;21125:129;21122:236;;;21271:8;:15;;-1:-1:-1;;21271:15:0;21282:4;21271:15;;;21303:10;:8;:10::i;:::-;21330:8;:16;;-1:-1:-1;;21330:16:0;;;21122:236;-1:-1:-1;;;;;21488:25:0;;21370:12;21488:25;;;:19;:25;;;;;;21385:4;;21488:25;;;:52;;-1:-1:-1;;;;;;21517:23:0;;;;;;:19;:23;;;;;;;;21488:52;21485:99;;;-1:-1:-1;21567:5:0;21485:99;21604:12;21631:21;21744:7;21741:1318;;;21899:16;:12;21914:1;21899:16;:::i;:::-;21877:18;;:38;;:73;;;;-1:-1:-1;;;;;;21919:31:0;;;;;;:25;:31;;;;;;;;21877:73;21874:1000;;;22000:3;21986:11;:6;21995:2;21986:11;:::i;:::-;:17;;;;:::i;:::-;22044:16;;21970:33;;-1:-1:-1;22022:54:0;;22038:4;;-1:-1:-1;;;;;22044:16:0;21970:33;22022:15;:54::i;:::-;21874:1000;;;-1:-1:-1;;;;;22139:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22188:1;22172:13;;:17;22139:50;22135:739;;;22240:3;22225:13;;22216:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;22209:34;;22310:13;;22291:16;;22284:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22262:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22390:13:0;;22371:16;;22364:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;22342:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22458:13:0;;22445:10;;22438:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;22422:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;22135:739:0;;-1:-1:-1;22135:739:0;;-1:-1:-1;;;;;22534:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22584:1;22569:12;;:16;22534:51;22531:343;;;22634:3;22619:12;;22610:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;22603:34;;22700:12;;22682:15;;22675:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22653:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22778:12:0;;22760:15;;22753:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;22731:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22844:12:0;;22832:9;;22825:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;22809:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;22531:343:0;22905:8;;22902:93;;22937:42;22953:4;22967;22974;22937:15;:42::i;:::-;23027:20;23034:13;23027:4;:20;:::i;:::-;23017:30;;;;:::i;:::-;;;21741:1318;23071:33;23087:4;23093:2;23097:6;23071:15;:33::i;:::-;23120:8;;;;;;;23117:194;;;-1:-1:-1;;;;;23148:23:0;;;;;;:19;:23;;;;;;;;23147:24;:54;;;;-1:-1:-1;;;;;;23176:25:0;;;;;;:19;:25;;;;;;;;23175:26;23147:54;:77;;;;;23211:13;-1:-1:-1;;;;;23205:19:0;:2;-1:-1:-1;;;;;23205:19:0;;;23147:77;:94;;;;-1:-1:-1;9030:6:0;;-1:-1:-1;;;;;23228:13:0;;;9030:6;;23228:13;;23147:94;23144:156;;;-1:-1:-1;;;;;23261:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;23261:21:0;23278:4;23261:21;;;23144:156;18735:4583;;;;;18656:4662;;;:::o;17583:248::-;-1:-1:-1;;;;;17666:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;17666:39:0;;;;;;;17726;17666:31;:39;17726:26;:39::i;:::-;17783:40;;;;;;-1:-1:-1;;;;;17783:40:0;;;;;;;;17583:248;;:::o;24458:1454::-;24541:4;24497:23;5636:18;;;;;;;;;;;24497:50;;24558:25;24628:12;;24607:18;;24586;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24558:82;-1:-1:-1;24665:20:0;;;:46;;-1:-1:-1;24689:22:0;;24665:46;24662:60;;;24714:7;;24458:1454::o;24662:60::-;24755:18;;;:23;;;:::i;:::-;24737:15;:41;24734:113;;;24812:18;;;:23;;;:::i;:::-;24794:41;;24734:113;24859:12;24941:23;25026:1;25006:17;24985:18;;24967:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24941:86;-1:-1:-1;25048:51:0;25065:33;24941:86;25065:15;:33;:::i;:::-;25048:16;:51::i;:::-;25305:18;;25142:21;;;;25121:18;;25305:20;;25324:1;;25305:20;:::i;:::-;25284:42;;:17;:42;:::i;:::-;25262:18;;25249:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;25223:104;;25338:17;25427:1;25408:18;;:20;;;;:::i;:::-;25387:42;;:17;:42;:::i;:::-;25371:12;;25358:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;25338:92;-1:-1:-1;25464:27:0;25338:92;25464:15;:27;:::i;:::-;25445:46;;;;:::i;:::-;25538:1;25517:18;:22;;;25550:18;:22;;;25583:12;:16;25445:46;-1:-1:-1;25625:19:0;;;;;:42;;;25666:1;25648:15;:19;25625:42;25622:119;;;25683:46;25696:15;25713;25683:12;:46::i;:::-;25774:10;;25766:46;;-1:-1:-1;;;;;25774:10:0;;;;25798:9;;25766:46;;;;25798:9;25774:10;25766:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25848:16:0;;25840:64;;25753:59;;-1:-1:-1;;;;;;25848:16:0;;25878:21;;25840:64;;;;25878:21;25848:16;25840:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24458:1454:0:o;7333:614::-;-1:-1:-1;;;;;7473:20:0;;7465:70;;;;-1:-1:-1;;;7465:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7554:23:0;;7546:71;;;;-1:-1:-1;;;7546:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7654:17:0;;7630:21;7654:17;;;;;;;;;;;7690:23;;;;7682:74;;;;-1:-1:-1;;;7682:74:0;;18759:2:1;7682:74:0;;;18741:21:1;18798:2;18778:18;;;18771:30;18837:34;18817:18;;;18810:62;-1:-1:-1;;;18888:18:1;;;18881:36;18934:19;;7682:74:0;18557:402:1;7682:74:0;-1:-1:-1;;;;;7792:17:0;;;:9;:17;;;;;;;;;;;7812:22;;;7792:42;;7856:20;;;;;;;;:30;;7828:6;;7792:9;7856:30;;7828:6;;7856:30;:::i;:::-;;;;;;;;7921:9;-1:-1:-1;;;;;7904:35:0;7913:6;-1:-1:-1;;;;;7904:35:0;;7932:6;7904:35;;;;1839:25:1;;1827:2;1812:18;;1693:177;7904:35:0;;;;;;;;7454:493;7333:614;;;:::o;16210:207::-;-1:-1:-1;;;;;16298:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;16298:52:0;;;;;;;;;;16366:43;;19132:51:1;;;19199:18;;;19192:50;16366:43:0;;19105:18:1;16366:43:0;;;;;;;16210:207;;:::o;23326:591::-;23478:16;;;23492:1;23478:16;;;;;;;;23454:21;;23478:16;;;;;;;;;;-1:-1:-1;23478:16:0;23454:40;;23523:4;23505;23510:1;23505:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23505:23:0;;;-1:-1:-1;;;;;23505:23:0;;;;;23549:15;-1:-1:-1;;;;;23549:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23539:4;23544:1;23539:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;23539:32:0;;;-1:-1:-1;;;;;23539:32:0;;;;;23584:62;23601:4;23616:15;23634:11;23584:8;:62::i;:::-;23685:224;;-1:-1:-1;;;23685:224:0;;-1:-1:-1;;;;;23685:15:0;:66;;;;:224;;23766:11;;23792:1;;23836:4;;23863;;23883:15;;23685:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23381:536;23326:591;:::o;23929:521::-;24077:62;24094:4;24109:15;24127:11;24077:8;:62::i;:::-;24182:260;;-1:-1:-1;;;24182:260:0;;24254:4;24182:260;;;20835:34:1;20885:18;;;20878:34;;;24300:1:0;20928:18:1;;;20921:34;;;20971:18;;;20964:34;24394:6:0;21014:19:1;;;21007:44;24416:15:0;21067:19:1;;;21060:35;24182:15:0;-1:-1:-1;;;;;24182:31:0;;;;24221:9;;20769:19:1;;24182:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23929:521;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;:::-;1451:5;1215:247;-1:-1:-1;;;1215:247:1:o;1875:127::-;1936:10;1931:3;1927:20;1924:1;1917:31;1967:4;1964:1;1957:15;1991:4;1988:1;1981:15;2007:275;2078:2;2072:9;2143:2;2124:13;;-1:-1:-1;;2120:27:1;2108:40;;2178:18;2163:34;;2199:22;;;2160:62;2157:88;;;2225:18;;:::i;:::-;2261:2;2254:22;2007:275;;-1:-1:-1;2007:275:1:o;2287:183::-;2347:4;2380:18;2372:6;2369:30;2366:56;;;2402:18;;:::i;:::-;-1:-1:-1;2447:1:1;2443:14;2459:4;2439:25;;2287:183::o;2475:662::-;2529:5;2582:3;2575:4;2567:6;2563:17;2559:27;2549:55;;2600:1;2597;2590:12;2549:55;2636:6;2623:20;2662:4;2686:60;2702:43;2742:2;2702:43;:::i;:::-;2686:60;:::i;:::-;2780:15;;;2866:1;2862:10;;;;2850:23;;2846:32;;;2811:12;;;;2890:15;;;2887:35;;;2918:1;2915;2908:12;2887:35;2954:2;2946:6;2942:15;2966:142;2982:6;2977:3;2974:15;2966:142;;;3048:17;;3036:30;;3086:12;;;;2999;;2966:142;;;-1:-1:-1;3126:5:1;2475:662;-1:-1:-1;;;;;;2475:662:1:o;3142:1215::-;3260:6;3268;3321:2;3309:9;3300:7;3296:23;3292:32;3289:52;;;3337:1;3334;3327:12;3289:52;3377:9;3364:23;3406:18;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3501:6;3490:9;3486:22;3476:32;;3546:7;3539:4;3535:2;3531:13;3527:27;3517:55;;3568:1;3565;3558:12;3517:55;3604:2;3591:16;3626:4;3650:60;3666:43;3706:2;3666:43;:::i;3650:60::-;3744:15;;;3826:1;3822:10;;;;3814:19;;3810:28;;;3775:12;;;;3850:19;;;3847:39;;;3882:1;3879;3872:12;3847:39;3906:11;;;;3926:217;3942:6;3937:3;3934:15;3926:217;;;4022:3;4009:17;4039:31;4064:5;4039:31;:::i;:::-;4083:18;;3959:12;;;;4121;;;;3926:217;;;4162:5;-1:-1:-1;;4205:18:1;;4192:32;;-1:-1:-1;;4236:16:1;;;4233:36;;;4265:1;4262;4255:12;4233:36;;4288:63;4343:7;4332:8;4321:9;4317:24;4288:63;:::i;:::-;4278:73;;;3142:1215;;;;;:::o;4362:456::-;4439:6;4447;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;4563:9;4550:23;4582:31;4607:5;4582:31;:::i;:::-;4632:5;-1:-1:-1;4689:2:1;4674:18;;4661:32;4702:33;4661:32;4702:33;:::i;:::-;4362:456;;4754:7;;-1:-1:-1;;;4808:2:1;4793:18;;;;4780:32;;4362:456::o;4823:180::-;4882:6;4935:2;4923:9;4914:7;4910:23;4906:32;4903:52;;;4951:1;4948;4941:12;4903:52;-1:-1:-1;4974:23:1;;4823:180;-1:-1:-1;4823:180:1:o;5405:118::-;5491:5;5484:13;5477:21;5470:5;5467:32;5457:60;;5513:1;5510;5503:12;5528:382;5593:6;5601;5654:2;5642:9;5633:7;5629:23;5625:32;5622:52;;;5670:1;5667;5660:12;5622:52;5709:9;5696:23;5728:31;5753:5;5728:31;:::i;:::-;5778:5;-1:-1:-1;5835:2:1;5820:18;;5807:32;5848:30;5807:32;5848:30;:::i;:::-;5897:7;5887:17;;;5528:382;;;;;:::o;5915:316::-;5992:6;6000;6008;6061:2;6049:9;6040:7;6036:23;6032:32;6029:52;;;6077:1;6074;6067:12;6029:52;-1:-1:-1;;6100:23:1;;;6170:2;6155:18;;6142:32;;-1:-1:-1;6221:2:1;6206:18;;;6193:32;;5915:316;-1:-1:-1;5915:316:1:o;6236:241::-;6292:6;6345:2;6333:9;6324:7;6320:23;6316:32;6313:52;;;6361:1;6358;6351:12;6313:52;6400:9;6387:23;6419:28;6441:5;6419:28;:::i;6482:388::-;6550:6;6558;6611:2;6599:9;6590:7;6586:23;6582:32;6579:52;;;6627:1;6624;6617:12;6579:52;6666:9;6653:23;6685:31;6710:5;6685:31;:::i;:::-;6735:5;-1:-1:-1;6792:2:1;6777:18;;6764:32;6805:33;6764:32;6805:33;:::i;6875:380::-;6954:1;6950:12;;;;6997;;;7018:61;;7072:4;7064:6;7060:17;7050:27;;7018:61;7125:2;7117:6;7114:14;7094:18;7091:38;7088:161;;7171:10;7166:3;7162:20;7159:1;7152:31;7206:4;7203:1;7196:15;7234:4;7231:1;7224:15;7088:161;;6875:380;;;:::o;7260:356::-;7462:2;7444:21;;;7481:18;;;7474:30;7540:34;7535:2;7520:18;;7513:62;7607:2;7592:18;;7260:356::o;8403:127::-;8464:10;8459:3;8455:20;8452:1;8445:31;8495:4;8492:1;8485:15;8519:4;8516:1;8509:15;8535:127;8596:10;8591:3;8587:20;8584:1;8577:31;8627:4;8624:1;8617:15;8651:4;8648:1;8641:15;8667:168;8740:9;;;8771;;8788:15;;;8782:22;;8768:37;8758:71;;8809:18;;:::i;8840:135::-;8879:3;8900:17;;;8897:43;;8920:18;;:::i;:::-;-1:-1:-1;8967:1:1;8956:13;;8840:135::o;9389:125::-;9454:9;;;9475:10;;;9472:36;;;9488:18;;:::i;10639:184::-;10709:6;10762:2;10750:9;10741:7;10737:23;10733:32;10730:52;;;10778:1;10775;10768:12;10730:52;-1:-1:-1;10801:16:1;;10639:184;-1:-1:-1;10639:184:1:o;11107:245::-;11174:6;11227:2;11215:9;11206:7;11202:23;11198:32;11195:52;;;11243:1;11240;11233:12;11195:52;11275:9;11269:16;11294:28;11316:5;11294:28;:::i;14732:401::-;14934:2;14916:21;;;14973:2;14953:18;;;14946:30;15012:34;15007:2;14992:18;;14985:62;-1:-1:-1;;;15078:2:1;15063:18;;15056:35;15123:3;15108:19;;14732:401::o;15138:399::-;15340:2;15322:21;;;15379:2;15359:18;;;15352:30;15418:34;15413:2;15398:18;;15391:62;-1:-1:-1;;;15484:2:1;15469:18;;15462:33;15527:3;15512:19;;15138:399::o;16607:128::-;16674:9;;;16695:11;;;16692:37;;;16709:18;;:::i;18335:217::-;18375:1;18401;18391:132;;18445:10;18440:3;18436:20;18433:1;18426:31;18480:4;18477:1;18470:15;18508:4;18505:1;18498:15;18391:132;-1:-1:-1;18537:9:1;;18335:217::o;19253:251::-;19323:6;19376:2;19364:9;19355:7;19351:23;19347:32;19344:52;;;19392:1;19389;19382:12;19344:52;19424:9;19418:16;19443:31;19468:5;19443:31;:::i;19509:980::-;19771:4;19819:3;19808:9;19804:19;19850:6;19839:9;19832:25;19876:2;19914:6;19909:2;19898:9;19894:18;19887:34;19957:3;19952:2;19941:9;19937:18;19930:31;19981:6;20016;20010:13;20047:6;20039;20032:22;20085:3;20074:9;20070:19;20063:26;;20124:2;20116:6;20112:15;20098:29;;20145:1;20155:195;20169:6;20166:1;20163:13;20155:195;;;20234:13;;-1:-1:-1;;;;;20230:39:1;20218:52;;20325:15;;;;20290:12;;;;20266:1;20184:9;20155:195;;;-1:-1:-1;;;;;;;20406:32:1;;;;20401:2;20386:18;;20379:60;-1:-1:-1;;;20470:3:1;20455:19;20448:35;20367:3;19509:980;-1:-1:-1;;;19509:980:1:o;21106:306::-;21194:6;21202;21210;21263:2;21251:9;21242:7;21238:23;21234:32;21231:52;;;21279:1;21276;21269:12;21231:52;21308:9;21302:16;21292:26;;21358:2;21347:9;21343:18;21337:25;21327:35;;21402:2;21391:9;21387:18;21381:25;21371:35;;21106:306;;;;;:::o

Swarm Source

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