ETH Price: $2,391.02 (+2.82%)

Token

Eth Note (ETHNOTE)
 

Overview

Max Total Supply

666,666,666 ETHNOTE

Holders

152

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,819,999.99818 ETHNOTE

Value
$0.00
0xbc62638c3b13d891ccb81a51134ff29635681359
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:
EthNote

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-22
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

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 EthNote is ERC20, Ownable {
    // Variables
    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public MarketingAddress;
    address public DevelopmentAddress;

    bool private swapEnabled = false;
    bool private limitsEnabled = true;
    bool private tradingEnabled = false;
    bool private transferDelayEnabled = true;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;
    uint256 public tradingEnabledBlock = 0;
    uint256 private justicePeriod = 0;
    uint256 private swapTokensAtAmount;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForDevelopment;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private automatedMarketMakerPairs;
    mapping (address => uint256) private _holderLastTransferTimestamp; 
    mapping (address => uint256) public _lockedWallets;
    mapping (address => bool) public _evil;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event EvilPurged(address guiltyName);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedSwapTokensAtAmount(uint256 newAmount);
    event UpdatedMarketingAddress(address indexed newWallet);
    event UpdatedDevelopmentAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event TransferForeignToken(address token, uint256 amount);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Eth Note", "ETHNOTE") {
        address newOwner = msg.sender;
        
        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 = 666666666 * 10**18;
        maxBuyAmount = totalSupply * 3/1000;
        maxSellAmount = totalSupply * 1/100;
        maxWalletAmount = totalSupply * 1/100;
        swapTokensAtAmount = totalSupply * 1 / 4000;

        buyMarketingFee = 3;
        buyLiquidityFee = 4;
        buyDevelopmentFee = 2;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;

        sellMarketingFee = 6;
        sellLiquidityFee = 8;
        sellDevelopmentFee = 4;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;

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

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

        MarketingAddress = address(newOwner);
        DevelopmentAddress = address(newOwner);
        
        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // Exclude an address from the max transaction 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 _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    // Exclude an address from transaction fees
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    // Designate AMM pair 
    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);
    }

    // Liquidity add helper function
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    // Swap native token for ETH
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // Transfer tokens
    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");
        require(_lockedWallets[from] < block.timestamp, "Lock active");
        require(!_evil[from], "Guilty");
        
        // Check if limits are in place
        if (limitsEnabled) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)) {
                if (!tradingEnabled) {
                    require(from != address(uniswapV2Router) && from != address(uniswapV2Pair), "Trading is not active");
                }

                if (transferDelayEnabled) {
                    if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 1 && _holderLastTransferTimestamp[to] < block.number - 1, "_transfer:: Transfer Delay enabled. Try again later");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Exceeds max wallet");
                } 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, "Exceeds max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        // Check if threshold has been reached for contract to sell for liquidity, marketing and development
        if (canSwap && swapEnabled && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapBack();
        }
        
        // Transfer tokens for buy and sell, wallet transfers excluded
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint256 penaltyAmount = 0;
            if (block.number - tradingEnabledBlock <= justicePeriod && automatedMarketMakerPairs[from]) {
                penaltyAmount = amount * 99 / 100;
                super._transfer(from, MarketingAddress, penaltyAmount);
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                if (block.number - tradingEnabledBlock - justicePeriod == 1) {
                    _evil[to] = true;
                    emit EvilPurged(to);
                }
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForDevelopment += fees * buyDevelopmentFee / buyTotalFees;
            } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForDevelopment += fees * sellDevelopmentFee / sellTotalFees;
            }

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

    // Enable trading and assign values of arguments to variables
    function enableTrading(uint256 blocks) external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        require(blocks <= 5, "Must be less than 5 blocks");
        tradingEnabled = true;
        swapEnabled = true;
        tradingEnabledBlock = block.number;
        justicePeriod = blocks;
        emit EnabledTrading();
    }
    
    // Remove trading limits
    function removeLimits() external onlyOwner {
        limitsEnabled = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // Disable transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    // Pass judgement on the guilty
    function passJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = true;
        }
    }

    // Reverse guilty verdict
    function reverseJudgement(address[] memory names) external onlyOwner {
        for (uint i = 0; i < names.length; i++) {
            _evil[names[i]] = false;
        }
    }

    // Lock wallet from transferring out for given time
    function lockTokens(address[] memory wallets, uint256[] memory numDays) external onlyOwner {
        require(wallets.length == numDays.length, "Arrays must be the same length");
        require(wallets.length < 200, "Can only lock 200 wallets per txn due to gas limits");
        for (uint i = 0; i < wallets.length; i++) {
            require(balanceOf(wallets[i]) > 0, "No tokens");
            require(_lockedWallets[wallets[i]] < block.timestamp, "Already locked");
            _lockedWallets[wallets[i]] = block.timestamp + numDays[i] * 1 days;
        }
    }

    // Update max buy amount
    function updateMaxBuyAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max buy amount lower than 0.1%");
        maxBuyAmount = newAmount * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    // Update max sell amount
    function updateMaxSellAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 1 / 1000) / 10**18, "Max sell amount lower than 0.1%");
        maxSellAmount = newAmount * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    // Update max wallet amount
    function updateMaxWalletAmount(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 3 / 1000) / 10**18, "Max wallet amount lower than 0.3%");
        maxWalletAmount = newAmount * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // Update token threshold for when the contract sells for liquidity, marketing and development
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= (totalSupply() * 1 / 100000) / 10**18, "Threshold lower than 0.001% total supply"); 
  	    require(newAmount <= (totalSupply() * 1 / 1000) / 10**18, "Threshold higher than 0.1% total supply");
  	    swapTokensAtAmount = newAmount * (10**18);
        emit UpdatedSwapTokensAtAmount(swapTokensAtAmount);
  	}
    
    // Transfer given number of tokens to given address
    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"); 
        for (uint256 i = 0; i < wallets.length; i++) {
            _transfer(msg.sender, wallets[i], amountsInTokens[i] * 10**18);
        }
    }

    // Update fees on buys
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 9, "Must keep fees at 9% or less");
    }

    // Update fees on sells
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _developmentFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee;
        require(sellTotalFees <= 18, "Must keep fees at 18% or less");
    }
    
    // Contract sells
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        bool success;
        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 ethForDevelopment = ethBalance * tokensForDevelopment / (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForDevelopment;
            
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

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

    // Withdraw stuck ETH
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    // Designate marketing wallet address
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        MarketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }

    // Designate development wallet address
    function setDevelopmentAddress(address _developmentAddress) external onlyOwner {
        require(_developmentAddress != address(0), "_developmentAddress address cannot be 0");
        DevelopmentAddress = payable(_developmentAddress);
        emit UpdatedDevelopmentAddress(_developmentAddress);
    }
}

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":false,"internalType":"address","name":"guiltyName","type":"address"}],"name":"EvilPurged","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":"UpdatedDevelopmentAddress","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSwapTokensAtAmount","type":"event"},{"inputs":[],"name":"DevelopmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_evil","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lockedWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"numDays","type":"uint256[]"}],"name":"lockTokens","outputs":[],"stateMutability":"nonpayable","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":"names","type":"address[]"}],"name":"passJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"names","type":"address[]"}],"name":"reverseJudgement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","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":"address","name":"_developmentAddress","type":"address"}],"name":"setDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_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":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","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":"_developmentFee","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"}]

60c06040526007805463ffffffff60a01b19166201000160a81b1790556000600b819055600c553480156200003357600080fd5b506040805180820182526008815267457468204e6f746560c01b6020808301918252835180850190945260078452664554484e4f544560c81b90840152815191929162000083916003916200076b565b508051620000999060049060208401906200076b565b5050506000620000ae6200040860201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620041e0833981519152908290a35033737a250d5630b4cf539739df2c5dacb4c659f2488d6200010e8160016200040c565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017f919062000811565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f3919062000811565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000811565b6001600160a01b031660a0819052620002829060016200046f565b6b02277428614a865b806800006103e86200029f82600362000859565b620002ab91906200087b565b6008556064620002bd82600162000859565b620002c991906200087b565b6009556064620002db82600162000859565b620002e791906200087b565b600a55610fa0620002fa82600162000859565b6200030691906200087b565b600d556003600f8190556004601081905560026011819055916200032b91906200089e565b6200033791906200089e565b600e55600660138190556008601481905560046015819055916200035c91906200089e565b6200036891906200089e565b601255620003788360016200040c565b620003853060016200040c565b6200039461dead60016200040c565b620003a1836001620004db565b620003ae306001620004db565b620003bd61dead6001620004db565b600680546001600160a01b0385166001600160a01b03199182168117909255600780549091169091179055620003f4838262000589565b620003ff836200066e565b505050620008f6565b3390565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601b60205260409020805460ff19168215151790556200049f82826200040c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200052a5760405162461bcd60e51b81526020600482018190526024820152600080516020620041c083398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005e15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000521565b8060026000828254620005f591906200089e565b90915550506001600160a01b03821660009081526020819052604081208054839290620006249084906200089e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006b95760405162461bcd60e51b81526020600482018190526024820152600080516020620041c0833981519152604482015260640162000521565b6001600160a01b038116620007205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000521565b6005546040516001600160a01b03808416921690600080516020620041e083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200077990620008b9565b90600052602060002090601f0160209004810192826200079d5760008555620007e8565b82601f10620007b857805160ff1916838001178555620007e8565b82800160010185558215620007e8579182015b82811115620007e8578251825591602001919060010190620007cb565b50620007f6929150620007fa565b5090565b5b80821115620007f65760008155600101620007fb565b6000602082840312156200082457600080fd5b81516001600160a01b03811681146200083c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000876576200087662000843565b500290565b6000826200089957634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008b457620008b462000843565b500190565b600181811c90821680620008ce57607f821691505b60208210811415620008f057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161385762000969600039600081816104fb015281816111cd015281816117100152818161230301526123cd01526000818161037c015281816122c60152818161239001528181612fae01528181613067015281816130a30152818161311d015261317a01526138576000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415801561233857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415801561240257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f000000000000000000000000000000000000000000000000000000000000000084611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205284425e67d50191f6aee00c31be094595e5a59e7e0a441259c16fcd3026990964736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063c3e9c34f116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d31461092e578063f2fde38b14610944578063f5648a4f14610964578063f63743421461097957600080fd5b8063dd62ed3e146108b3578063e884f260146108f9578063ec238a811461090e57600080fd5b8063c3e9c34f146107ed578063c96fd36d1461081d578063d1a0c9461461083d578063d257b34f1461085d578063d85ba0631461087d578063dc3f0d0f1461089357600080fd5b8063a457c2d711610149578063b204141111610123578063b204141114610777578063c02466681461078d578063c17b5b8c146107ad578063c18bc195146107cd57600080fd5b8063a457c2d714610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b80638da5cb5b1461066b578063906e9dd01461068957806392136913146106a9578063930a6d07146106bf57806395d89b41146106ec5780639a7a23d61461070157600080fd5b806349bd5a5e1161024f5780637571336a116102085780638095d564116101e25780638095d564146105f557806382aa7c68146106155780638366e79a1461063557806388e765ff1461065557600080fd5b80637571336a146105a9578063764556dc146105c95780637bce5a04146105df57600080fd5b806349bd5a5e146104e957806366d602ae1461051d5780636a486a8e1461053357806370a0823114610549578063715018a61461057f578063751039fc1461059457600080fd5b806323b872dd116102bc578063313ce56711610296578063313ce5671461046d5780633547800a146104895780633936e8b9146104a957806339509351146104c957600080fd5b806323b872dd1461040d57806329b1c15c1461042d5780632be32b611461044d57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806318a94cf1146103d55780632307b441146103eb57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461098f565b60405161033191906131f1565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461325e565b610a21565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506002545b604051908152602001610331565b3480156103e157600080fd5b506103c760155481565b3480156103f757600080fd5b5061040b610406366004613369565b610a37565b005b34801561041957600080fd5b5061035a610428366004613424565b610b9e565b34801561043957600080fd5b5061040b610448366004613465565b610c48565b34801561045957600080fd5b5061040b610468366004613489565b610d21565b34801561047957600080fd5b5060405160128152602001610331565b34801561049557600080fd5b5061040b6104a4366004613369565b610e1c565b3480156104b557600080fd5b5060065461039e906001600160a01b031681565b3480156104d557600080fd5b5061035a6104e436600461325e565b611088565b3480156104f557600080fd5b5061039e7f0000000000000000000000008cf85fb4c4bbc114fb5f9b1c67a52553ab8475be81565b34801561052957600080fd5b506103c760095481565b34801561053f57600080fd5b506103c760125481565b34801561055557600080fd5b506103c7610564366004613465565b6001600160a01b031660009081526020819052604090205490565b34801561058b57600080fd5b5061040b6110c4565b3480156105a057600080fd5b5061040b611138565b3480156105b557600080fd5b5061040b6105c43660046134b0565b61119c565b3480156105d557600080fd5b506103c7600b5481565b3480156105eb57600080fd5b506103c7600f5481565b34801561060157600080fd5b5061040b6106103660046134e9565b611288565b34801561062157600080fd5b5061040b610630366004613489565b61132b565b34801561064157600080fd5b5061035a610650366004613515565b61144c565b34801561066157600080fd5b506103c760085481565b34801561067757600080fd5b506005546001600160a01b031661039e565b34801561069557600080fd5b5061040b6106a4366004613465565b6115fd565b3480156106b557600080fd5b506103c760135481565b3480156106cb57600080fd5b506103c76106da366004613465565b601d6020526000908152604090205481565b3480156106f857600080fd5b506103246116d5565b34801561070d57600080fd5b5061040b61071c3660046134b0565b6116e4565b34801561072d57600080fd5b5061035a61073c36600461325e565b6117c4565b34801561074d57600080fd5b5061035a61075c36600461325e565b61185d565b34801561076d57600080fd5b506103c7600a5481565b34801561078357600080fd5b506103c760115481565b34801561079957600080fd5b5061040b6107a83660046134b0565b61186a565b3480156107b957600080fd5b5061040b6107c83660046134e9565b6118f3565b3480156107d957600080fd5b5061040b6107e8366004613489565b611994565b3480156107f957600080fd5b5061035a610808366004613465565b601e6020526000908152604090205460ff1681565b34801561082957600080fd5b5061040b610838366004613543565b611a92565b34801561084957600080fd5b5060075461039e906001600160a01b031681565b34801561086957600080fd5b5061040b610878366004613489565b611b24565b34801561088957600080fd5b506103c7600e5481565b34801561089f57600080fd5b5061040b6108ae366004613489565b611cbd565b3480156108bf57600080fd5b506103c76108ce366004613515565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090557600080fd5b5061040b611db1565b34801561091a57600080fd5b5061040b610929366004613543565b611dea565b34801561093a57600080fd5b506103c760105481565b34801561095057600080fd5b5061040b61095f366004613465565b611e7c565b34801561097057600080fd5b5061040b611f67565b34801561098557600080fd5b506103c760145481565b60606003805461099e90613580565b80601f01602080910402602001604051908101604052809291908181526020018280546109ca90613580565b8015610a175780601f106109ec57610100808354040283529160200191610a17565b820191906000526020600020905b8154815290600101906020018083116109fa57829003601f168201915b5050505050905090565b6000610a2e338484611fde565b50600192915050565b6005546001600160a01b03163314610a6a5760405162461bcd60e51b8152600401610a61906135bb565b60405180910390fd5b8051825114610abb5760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610b2b5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a61565b60005b8251811015610b9957610b8733848381518110610b4d57610b4d6135f0565b6020026020010151848481518110610b6757610b676135f0565b6020026020010151670de0b6b3a7640000610b82919061361c565b612102565b80610b918161363b565b915050610b2e565b505050565b6000610bab848484612102565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a61565b610c3d8533858403611fde565b506001949350505050565b6005546001600160a01b03163314610c725760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116610cd85760405162461bcd60e51b815260206004820152602760248201527f5f646576656c6f706d656e744164647265737320616464726573732063616e6e60448201526606f7420626520360cc1b6064820152608401610a61565b600780546001600160a01b0319166001600160a01b0383169081179091556040517e9301a7a046a65d0304006b0bfee72798e7e8c804b21a3d33e0838d87680e9d90600090a250565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8610d6060025490565b610d6b90600161361c565b610d759190613656565b610d7f9190613656565b811015610dce5760405162461bcd60e51b815260206004820152601e60248201527f4d61782062757920616d6f756e74206c6f776572207468616e20302e312500006044820152606401610a61565b610de081670de0b6b3a764000061361c565b60088190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e465760405162461bcd60e51b8152600401610a61906135bb565b8051825114610e975760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a61565b60c8825110610f045760405162461bcd60e51b815260206004820152603360248201527f43616e206f6e6c79206c6f636b203230302077616c6c657473207065722074786044820152726e2064756520746f20676173206c696d69747360681b6064820152608401610a61565b60005b8251811015610b99576000610f4a848381518110610f2757610f276135f0565b60200260200101516001600160a01b031660009081526020819052604090205490565b11610f835760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610a61565b42601d6000858481518110610f9a57610f9a6135f0565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054106110015760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b1bd8dad95960921b6044820152606401610a61565b818181518110611013576110136135f0565b602002602001015162015180611029919061361c565b6110339042613678565b601d6000858481518110611049576110496135f0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806110809061363b565b915050610f07565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a2e9185906110bf908690613678565b611fde565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610a61906135bb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111625760405162461bcd60e51b8152600401610a61906135bb565b6007805462ff00ff60a81b191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111c65760405162461bcd60e51b8152600401610a61906135bb565b8061125d577f0000000000000000000000008cf85fb4c4bbc114fb5f9b1c67a52553ab8475be6001600160a01b0316826001600160a01b0316141561125d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520556e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610a61565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146112b25760405162461bcd60e51b8152600401610a61906135bb565b600f83905560108290556011819055806112cc8385613678565b6112d69190613678565b600e81905560091015610b995760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203925206f72206c657373000000006044820152606401610a61565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610a61906135bb565b600754600160b01b900460ff16156113af5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a61565b60058111156114005760405162461bcd60e51b815260206004820152601a60248201527f4d757374206265206c657373207468616e203520626c6f636b730000000000006044820152606401610a61565b6007805462ff00ff60a01b19166201000160a01b17905543600b55600c8190556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146114795760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b0383166114cf5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a61565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a9190613690565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906136a9565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116275760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b03811661168b5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610a61565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b60606004805461099e90613580565b6005546001600160a01b0316331461170e5760405162461bcd60e51b8152600401610a61906135bb565b7f0000000000000000000000008cf85fb4c4bbc114fb5f9b1c67a52553ab8475be6001600160a01b0316826001600160a01b031614156117b65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a61565b6117c08282612b28565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118465760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a61565b6118533385858403611fde565b5060019392505050565b6000610a2e338484612102565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461191d5760405162461bcd60e51b8152600401610a61906135bb565b601383905560148290556015819055806119378385613678565b6119419190613678565b60128181551015610b995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313825206f72206c6573730000006044820152606401610a61565b6005546001600160a01b031633146119be5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e86119d360025490565b6119de90600361361c565b6119e89190613656565b6119f29190613656565b811015611a4b5760405162461bcd60e51b815260206004820152602160248201527f4d61782077616c6c657420616d6f756e74206c6f776572207468616e20302e336044820152602560f81b6064820152608401610a61565b611a5d81670de0b6b3a764000061361c565b600a8190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e11565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576001601e6000848481518110611ae057611ae06135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611b1c8161363b565b915050611abf565b6005546001600160a01b03163314611b4e5760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a7640000620186a0611b6460025490565b611b6f90600161361c565b611b799190613656565b611b839190613656565b811015611be35760405162461bcd60e51b815260206004820152602860248201527f5468726573686f6c64206c6f776572207468616e20302e3030312520746f74616044820152676c20737570706c7960c01b6064820152608401610a61565b670de0b6b3a76400006103e8611bf860025490565b611c0390600161361c565b611c0d9190613656565b611c179190613656565b811115611c765760405162461bcd60e51b815260206004820152602760248201527f5468726573686f6c6420686967686572207468616e20302e312520746f74616c60448201526620737570706c7960c81b6064820152608401610a61565b611c8881670de0b6b3a764000061361c565b600d8190556040519081527f6d2120e4008cf6f7ae5156e6e187d00ab7959b8a693490358ec2da589a6bd36490602001610e11565b6005546001600160a01b03163314611ce75760405162461bcd60e51b8152600401610a61906135bb565b670de0b6b3a76400006103e8611cfc60025490565b611d0790600161361c565b611d119190613656565b611d1b9190613656565b811015611d6a5760405162461bcd60e51b815260206004820152601f60248201527f4d61782073656c6c20616d6f756e74206c6f776572207468616e20302e3125006044820152606401610a61565b611d7c81670de0b6b3a764000061361c565b60098190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e11565b6005546001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a61906135bb565b6007805460ff60b81b19169055565b6005546001600160a01b03163314611e145760405162461bcd60e51b8152600401610a61906135bb565b60005b81518110156117c0576000601e6000848481518110611e3857611e386135f0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e748161363b565b915050611e17565b6005546001600160a01b03163314611ea65760405162461bcd60e51b8152600401610a61906135bb565b6001600160a01b038116611f0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a61565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f915760405162461bcd60e51b8152600401610a61906135bb565b604051600090339047908381818185875af1925050503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b50505050565b6001600160a01b0383166120405760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a61565b6001600160a01b0382166120a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a61565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121285760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b03821661214e5760405162461bcd60e51b8152600401610a619061370b565b6000811161219e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a61565b6001600160a01b0383166000908152601d602052604090205442116121f35760405162461bcd60e51b815260206004820152600b60248201526a4c6f636b2061637469766560a81b6044820152606401610a61565b6001600160a01b0383166000908152601e602052604090205460ff16156122455760405162461bcd60e51b81526020600482015260066024820152654775696c747960d01b6044820152606401610a61565b600754600160a81b900460ff161561274d576005546001600160a01b0384811691161480159061228357506005546001600160a01b03838116911614155b801561229757506001600160a01b03821615155b80156122ae57506001600160a01b03821661dead14155b1561274d57600754600160b01b900460ff1661237c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b03161415801561233857507f0000000000000000000000008cf85fb4c4bbc114fb5f9b1c67a52553ab8475be6001600160a01b0316836001600160a01b031614155b61237c5760405162461bcd60e51b815260206004820152601560248201527454726164696e67206973206e6f742061637469766560581b6044820152606401610a61565b600754600160b81b900460ff16156124dd577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b03161415801561240257507f0000000000000000000000008cf85fb4c4bbc114fb5f9b1c67a52553ab8475be6001600160a01b0316826001600160a01b031614155b156124dd5761241260014361374e565b326000908152601c6020526040902054108015612450575061243560014361374e565b6001600160a01b0383166000908152601c6020526040902054105b6124b85760405162461bcd60e51b815260206004820152603360248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527232b217102a393c9030b3b0b4b7103630ba32b960691b6064820152608401610a61565b326000908152601c602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff16801561251e57506001600160a01b0382166000908152601a602052604090205460ff16155b156125f3576008548111156125855760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152666d61782062757960c81b6064820152608401610a61565b600a546001600160a01b0383166000908152602081905260409020546125ab9083613678565b11156125ee5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b61274d565b6001600160a01b0382166000908152601b602052604090205460ff16801561263457506001600160a01b0383166000908152601a602052604090205460ff16155b1561269d576009548111156125ee5760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015268081b585e081cd95b1b60ba1b6064820152608401610a61565b6001600160a01b0382166000908152601a602052604090205460ff161580156126df57506001600160a01b0383166000908152601a602052604090205460ff16155b1561274d57600a546001600160a01b03831660009081526020819052604090205461270a9083613678565b111561274d5760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b6044820152606401610a61565b30600090815260208190526040902054600d548110801590819061277a5750600754600160a01b900460ff165b801561279f57506001600160a01b0385166000908152601b602052604090205460ff16155b80156127c457506001600160a01b03851660009081526019602052604090205460ff16155b80156127e957506001600160a01b03841660009081526019602052604090205460ff16155b156127f6576127f6612b92565b6001600160a01b03851660009081526019602052604090205460ff1615801561283857506001600160a01b03841660009081526019602052604090205460ff16155b15612b1657600080600c54600b5443612851919061374e565b1115801561287757506001600160a01b0387166000908152601b602052604090205460ff165b156128b357606461288986606361361c565b6128939190613656565b6006549091506128ae9088906001600160a01b031683612d9f565b612aec565b6001600160a01b0387166000908152601b602052604090205460ff1680156128dd57506000600e54115b15612a0f57600c54600b546128f2904361374e565b6128fc919061374e565b6001141561295c576001600160a01b0386166000818152601e6020908152604091829020805460ff1916600117905590519182527fed275327edb02428d527ce974537501dfa0184b6cd668977aa732bdfd3f3504b910160405180910390a15b6064600e548661296c919061361c565b6129769190613656565b9150600e5460105483612989919061361c565b6129939190613656565b601760008282546129a49190613678565b9091555050600e54600f546129b9908461361c565b6129c39190613656565b601660008282546129d49190613678565b9091555050600e546011546129e9908461361c565b6129f39190613656565b60186000828254612a049190613678565b90915550612aec9050565b6001600160a01b0386166000908152601b602052604090205460ff168015612a3957506000601254115b15612aec57606460125486612a4e919061361c565b612a589190613656565b915060125460145483612a6b919061361c565b612a759190613656565b60176000828254612a869190613678565b9091555050601254601354612a9b908461361c565b612aa59190613656565b60166000828254612ab69190613678565b9091555050601254601554612acb908461361c565b612ad59190613656565b60186000828254612ae69190613678565b90915550505b8115612afd57612afd873084612d9f565b612b078183613678565b612b11908661374e565b945050505b612b21858585612d9f565b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055612b568282612ef4565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3060009081526020819052604081205490506000601854601654601754612bb99190613678565b612bc39190613678565b9050811580612bd0575080155b15612bd9575050565b600d54612be790600a61361c565b821115612bff57600d54612bfc90600a61361c565b91505b60008060028360175486612c13919061361c565b612c1d9190613656565b612c279190613656565b9050612c3b612c36828661374e565b612f57565b60175447908190600090612c5190600290613656565b612c5b908761374e565b601654612c68908561361c565b612c729190613656565b905060006002601754612c859190613656565b612c8f908861374e565b601854612c9c908661361c565b612ca69190613656565b9050612cb28183613678565b612cbc908461374e565b60006017819055601681905560185592508415801590612cdc5750600083115b15612ceb57612ceb8584613117565b6007546040516001600160a01b03909116908290600081818185875af1925050503d8060008114612d38576040519150601f19603f3d011682016040523d82523d6000602084013e612d3d565b606091505b50506006546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114612d8d576040519150601f19603f3d011682016040523d82523d6000602084013e612d92565b606091505b5050505050505050505050565b6001600160a01b038316612dc55760405162461bcd60e51b8152600401610a61906136c6565b6001600160a01b038216612deb5760405162461bcd60e51b8152600401610a619061370b565b6001600160a01b03831660009081526020819052604090205481811015612e635760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a61565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e9a908490613678565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ee691815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8c57612f8c6135f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e9190613765565b81600181518110613041576130416135f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061308c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906130e1908590600090869030904290600401613782565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050505050565b613142307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fde565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156131cc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b2191906137f3565b600060208083528351808285015260005b8181101561321e57858101830151858201604001528201613202565b81811115613230576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461325b57600080fd5b50565b6000806040838503121561327157600080fd5b823561327c81613246565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c9576132c961328a565b604052919050565b600067ffffffffffffffff8211156132eb576132eb61328a565b5060051b60200190565b600082601f83011261330657600080fd5b8135602061331b613316836132d1565b6132a0565b82815260059290921b8401810191818101908684111561333a57600080fd5b8286015b8481101561335e57803561335181613246565b835291830191830161333e565b509695505050505050565b6000806040838503121561337c57600080fd5b823567ffffffffffffffff8082111561339457600080fd5b6133a0868387016132f5565b93506020915081850135818111156133b757600080fd5b85019050601f810186136133ca57600080fd5b80356133d8613316826132d1565b81815260059190911b820183019083810190888311156133f757600080fd5b928401925b82841015613415578335825292840192908401906133fc565b80955050505050509250929050565b60008060006060848603121561343957600080fd5b833561344481613246565b9250602084013561345481613246565b929592945050506040919091013590565b60006020828403121561347757600080fd5b813561348281613246565b9392505050565b60006020828403121561349b57600080fd5b5035919050565b801515811461325b57600080fd5b600080604083850312156134c357600080fd5b82356134ce81613246565b915060208301356134de816134a2565b809150509250929050565b6000806000606084860312156134fe57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561352857600080fd5b823561353381613246565b915060208301356134de81613246565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b613578848285016132f5565b949350505050565b600181811c9082168061359457607f821691505b602082108114156135b557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561363657613636613606565b500290565b600060001982141561364f5761364f613606565b5060010190565b60008261367357634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561368b5761368b613606565b500190565b6000602082840312156136a257600080fd5b5051919050565b6000602082840312156136bb57600080fd5b8151613482816134a2565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561376057613760613606565b500390565b60006020828403121561377757600080fd5b815161348281613246565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d25784516001600160a01b0316835293830193918301916001016137ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561380857600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212205284425e67d50191f6aee00c31be094595e5a59e7e0a441259c16fcd3026990964736f6c634300080b0033

Deployed Bytecode Sourcemap

9306:17870:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3944:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4858:169;;;;;;;;;;-1:-1:-1;4858:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;4858:169:0;1072:187:1;9366:43:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1446:32:1;;;1428:51;;1416:2;1401:18;9366:43:0;1264:221:1;4265:108:0;;;;;;;;;;-1:-1:-1;4353:12:0;;4265:108;;;1636:25:1;;;1624:2;1609:18;4265:108:0;1490:177:1;10201:33:0;;;;;;;;;;;;;;;;23016:450;;;;;;;;;;-1:-1:-1;23016:450:0;;;;;:::i;:::-;;:::i;:::-;;5035:492;;;;;;;;;;-1:-1:-1;5035:492:0;;;;;:::i;:::-;;:::i;26868:305::-;;;;;;;;;;-1:-1:-1;26868:305:0;;;;;:::i;:::-;;:::i;21507:271::-;;;;;;;;;;-1:-1:-1;21507:271:0;;;;;:::i;:::-;;:::i;4164:93::-;;;;;;;;;;-1:-1:-1;4164:93:0;;4247:2;5197:36:1;;5185:2;5170:18;4164:93:0;5055:184:1;20896:573:0;;;;;;;;;;-1:-1:-1;20896:573:0;;;;;:::i;:::-;;:::i;9461:31::-;;;;;;;;;;-1:-1:-1;9461:31:0;;;;-1:-1:-1;;;;;9461:31:0;;;5535:215;;;;;;;;;;-1:-1:-1;5535:215:0;;;;;:::i;:::-;;:::i;9416:38::-;;;;;;;;;;;;;;;9745:28;;;;;;;;;;;;;;;;10090;;;;;;;;;;;;;;;;4381:127;;;;;;;;;;-1:-1:-1;4381:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4482:18:0;4455:7;4482:18;;;;;;;;;;;;4381:127;8025:150;;;;;;;;;;;;;:::i;20103:153::-;;;;;;;;;;;;;:::i;13333:269::-;;;;;;;;;;-1:-1:-1;13333:269:0;;;;;:::i;:::-;;:::i;9817:38::-;;;;;;;;;;;;;;;;9977:30;;;;;;;;;;;;;;;;23502:399;;;;;;;;;;-1:-1:-1;23502:399:0;;;;;:::i;:::-;;:::i;19701:360::-;;;;;;;;;;-1:-1:-1;19701:360:0;;;;;:::i;:::-;;:::i;25899:381::-;;;;;;;;;;-1:-1:-1;25899:381:0;;;;;:::i;:::-;;:::i;9711:27::-;;;;;;;;;;;;;;;;7811:79;;;;;;;;;;-1:-1:-1;7876:6:0;;-1:-1:-1;;;;;7876:6:0;7811:79;;26526:289;;;;;;;;;;-1:-1:-1;26526:289:0;;;;;:::i;:::-;;:::i;10125:31::-;;;;;;;;;;;;;;;;10639:50;;;;;;;;;;-1:-1:-1;10639:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;4052:104;;;;;;;;;;;;;:::i;14092:244::-;;;;;;;;;;-1:-1:-1;14092:244:0;;;;;:::i;:::-;;:::i;5758:413::-;;;;;;;;;;-1:-1:-1;5758:413:0;;;;;:::i;:::-;;:::i;4516:175::-;;;;;;;;;;-1:-1:-1;4516:175:0;;;;;:::i;:::-;;:::i;9780:30::-;;;;;;;;;;;;;;;;10051:32;;;;;;;;;;;;;;;;13874:182;;;;;;;;;;-1:-1:-1;13874:182:0;;;;;:::i;:::-;;:::i;23938:410::-;;;;;;;;;;-1:-1:-1;23938:410:0;;;;;:::i;:::-;;:::i;22138:286::-;;;;;;;;;;-1:-1:-1;22138:286:0;;;;;:::i;:::-;;:::i;10696:38::-;;;;;;;;;;-1:-1:-1;10696:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20442:173;;;;;;;;;;-1:-1:-1;20442:173:0;;;;;:::i;:::-;;:::i;9499:33::-;;;;;;;;;;-1:-1:-1;9499:33:0;;;;-1:-1:-1;;;;;9499:33:0;;;22532:415;;;;;;;;;;-1:-1:-1;22532:415:0;;;;;:::i;:::-;;:::i;9943:27::-;;;;;;;;;;;;;;;;21821:276;;;;;;;;;;-1:-1:-1;21821:276:0;;;;;:::i;:::-;;:::i;4699:151::-;;;;;;;;;;-1:-1:-1;4699:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4815:18:0;;;4788:7;4815:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4699:151;20299:98;;;;;;;;;;;;;:::i;20654:177::-;;;;;;;;;;-1:-1:-1;20654:177:0;;;;;:::i;:::-;;:::i;10014:30::-;;;;;;;;;;;;;;;;8183:244;;;;;;;;;;-1:-1:-1;8183:244:0;;;;;:::i;:::-;;:::i;26315:160::-;;;;;;;;;;;;;:::i;10163:31::-;;;;;;;;;;;;;;;;3944:100;3998:13;4031:5;4024:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3944:100;:::o;4858:169::-;4941:4;4958:39;173:10;4981:7;4990:6;4958:8;:39::i;:::-;-1:-1:-1;5015:4:0;4858:169;;;;:::o;23016:450::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;;;;;;;;;23158:15:::1;:22;23140:7;:14;:40;23132:83;;;::::0;-1:-1:-1;;;23132:83:0;;7977:2:1;23132:83:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;23132:83:0::1;7775:354:1::0;23132:83:0::1;23251:3;23234:7;:14;:20;23226:87;;;::::0;-1:-1:-1;;;23226:87:0;;8336:2:1;23226:87:0::1;::::0;::::1;8318:21:1::0;8375:2;8355:18;;;8348:30;8414:34;8394:18;;;8387:62;-1:-1:-1;;;8465:18:1;;;8458:52;8527:19;;23226:87:0::1;8134:418:1::0;23226:87:0::1;23330:9;23325:134;23349:7;:14;23345:1;:18;23325:134;;;23385:62;23395:10;23407:7;23415:1;23407:10;;;;;;;;:::i;:::-;;;;;;;23419:15;23435:1;23419:18;;;;;;;;:::i;:::-;;;;;;;23440:6;23419:27;;;;:::i;:::-;23385:9;:62::i;:::-;23365:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23325:134;;;;23016:450:::0;;:::o;5035:492::-;5175:4;5192:36;5202:6;5210:9;5221:6;5192:9;:36::i;:::-;-1:-1:-1;;;;;5268:19:0;;5241:24;5268:19;;;:11;:19;;;;;;;;173:10;5268:33;;;;;;;;5320:26;;;;5312:79;;;;-1:-1:-1;;;5312:79:0;;9336:2:1;5312:79:0;;;9318:21:1;9375:2;9355:18;;;9348:30;9414:34;9394:18;;;9387:62;-1:-1:-1;;;9465:18:1;;;9458:38;9513:19;;5312:79:0;9134:404:1;5312:79:0;5427:57;5436:6;173:10;5477:6;5458:16;:25;5427:8;:57::i;:::-;-1:-1:-1;5515:4:0;;5035:492;-1:-1:-1;;;;5035:492:0:o;26868:305::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26966:33:0;::::1;26958:85;;;::::0;-1:-1:-1;;;26958:85:0;;9745:2:1;26958:85:0::1;::::0;::::1;9727:21:1::0;9784:2;9764:18;;;9757:30;9823:34;9803:18;;;9796:62;-1:-1:-1;;;9874:18:1;;;9867:37;9921:19;;26958:85:0::1;9543:403:1::0;26958:85:0::1;27054:18;:49:::0;;-1:-1:-1;;;;;;27054:49:0::1;-1:-1:-1::0;;;;;27054:49:0;::::1;::::0;;::::1;::::0;;;27119:46:::1;::::0;::::1;::::0;-1:-1:-1;;27119:46:0::1;26868:305:::0;:::o;21507:271::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;21634:6:::1;21626:4;21606:13;4353:12:::0;;;4265:108;21606:13:::1;:17;::::0;21622:1:::1;21606:17;:::i;:::-;:24;;;;:::i;:::-;21605:35;;;;:::i;:::-;21592:9;:48;;21584:91;;;::::0;-1:-1:-1;;;21584:91:0;;10375:2:1;21584:91:0::1;::::0;::::1;10357:21:1::0;10414:2;10394:18;;;10387:30;10453:32;10433:18;;;10426:60;10503:18;;21584:91:0::1;10173:354:1::0;21584:91:0::1;21701:20;:9:::0;21714:6:::1;21701:20;:::i;:::-;21686:12;:35:::0;;;21737:33:::1;::::0;1636:25:1;;;21737:33:0::1;::::0;1624:2:1;1609:18;21737:33:0::1;;;;;;;;21507:271:::0;:::o;20896:573::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;21024:7:::1;:14;21006:7;:14;:32;20998:75;;;::::0;-1:-1:-1;;;20998:75:0;;7977:2:1;20998:75:0::1;::::0;::::1;7959:21:1::0;8016:2;7996:18;;;7989:30;8055:32;8035:18;;;8028:60;8105:18;;20998:75:0::1;7775:354:1::0;20998:75:0::1;21109:3;21092:7;:14;:20;21084:84;;;::::0;-1:-1:-1;;;21084:84:0;;10734:2:1;21084:84:0::1;::::0;::::1;10716:21:1::0;10773:2;10753:18;;;10746:30;10812:34;10792:18;;;10785:62;-1:-1:-1;;;10863:18:1;;;10856:49;10922:19;;21084:84:0::1;10532:415:1::0;21084:84:0::1;21184:6;21179:283;21200:7;:14;21196:1;:18;21179:283;;;21268:1;21244:21;21254:7;21262:1;21254:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4482:18:0;4455:7;4482:18;;;;;;;;;;;;4381:127;21244:21:::1;:25;21236:47;;;::::0;-1:-1:-1;;;21236:47:0;;11154:2:1;21236:47:0::1;::::0;::::1;11136:21:1::0;11193:1;11173:18;;;11166:29;-1:-1:-1;;;11211:18:1;;;11204:39;11260:18;;21236:47:0::1;10952:332:1::0;21236:47:0::1;21335:15;21306:14;:26;21321:7;21329:1;21321:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21306:26:0::1;-1:-1:-1::0;;;;;21306:26:0::1;;;;;;;;;;;;;:44;21298:71;;;::::0;-1:-1:-1;;;21298:71:0;;11491:2:1;21298:71:0::1;::::0;::::1;11473:21:1::0;11530:2;11510:18;;;11503:30;-1:-1:-1;;;11549:18:1;;;11542:44;11603:18;;21298:71:0::1;11289:338:1::0;21298:71:0::1;21431:7;21439:1;21431:10;;;;;;;;:::i;:::-;;;;;;;21444:6;21431:19;;;;:::i;:::-;21413:37;::::0;:15:::1;:37;:::i;:::-;21384:14;:26;21399:7;21407:1;21399:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21384:26:0::1;-1:-1:-1::0;;;;;21384:26:0::1;;;;;;;;;;;;:66;;;;21216:3;;;;;:::i;:::-;;;;21179:283;;5535:215:::0;173:10;5623:4;5672:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5672:34:0;;;;;;;;;;5623:4;;5640:80;;5663:7;;5672:47;;5709:10;;5672:47;:::i;:::-;5640:8;:80::i;8025:150::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;8118:6:::1;::::0;8097:40:::1;::::0;8134:1:::1;::::0;-1:-1:-1;;;;;8118:6:0::1;::::0;8097:40:::1;::::0;8134:1;;8097:40:::1;8148:6;:19:::0;;-1:-1:-1;;;;;;8148:19:0::1;::::0;;8025:150::o;20103:153::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;20157:13:::1;:21:::0;;-1:-1:-1;;;;20189:28:0;;;20233:15:::1;::::0;::::1;::::0;20173:5:::1;::::0;20233:15:::1;20103:153::o:0;13333:269::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;13430:4:::1;13425:113;;13469:13;-1:-1:-1::0;;;;;13459:23:0::1;:6;-1:-1:-1::0;;;;;13459:23:0::1;;;13451:75;;;::::0;-1:-1:-1;;;13451:75:0;;11967:2:1;13451:75:0::1;::::0;::::1;11949:21:1::0;12006:2;11986:18;;;11979:30;12045:34;12025:18;;;12018:62;-1:-1:-1;;;12096:18:1;;;12089:37;12143:19;;13451:75:0::1;11765:403:1::0;13451:75:0::1;-1:-1:-1::0;;;;;13548:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;13548:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13333:269::o;23502:399::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;23626:15:::1;:31:::0;;;23668:15:::1;:31:::0;;;23710:17:::1;:35:::0;;;23730:15;23771:33:::1;23686:13:::0;23644;23771:33:::1;:::i;:::-;:53;;;;:::i;:::-;23756:12;:68:::0;;;23859:1:::1;-1:-1:-1::0;23843:17:0::1;23835:58;;;::::0;-1:-1:-1;;;23835:58:0;;12375:2:1;23835:58:0::1;::::0;::::1;12357:21:1::0;12414:2;12394:18;;;12387:30;12453;12433:18;;;12426:58;12501:18;;23835:58:0::1;12173:352:1::0;19701:360:0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;19779:14:::1;::::0;-1:-1:-1;;;19779:14:0;::::1;;;19778:15;19770:51;;;::::0;-1:-1:-1;;;19770:51:0;;12732:2:1;19770:51:0::1;::::0;::::1;12714:21:1::0;12771:2;12751:18;;;12744:30;12810:25;12790:18;;;12783:53;12853:18;;19770:51:0::1;12530:347:1::0;19770:51:0::1;19850:1;19840:6;:11;;19832:50;;;::::0;-1:-1:-1;;;19832:50:0;;13084:2:1;19832:50:0::1;::::0;::::1;13066:21:1::0;13123:2;13103:18;;;13096:30;13162:28;13142:18;;;13135:56;13208:18;;19832:50:0::1;12882:350:1::0;19832:50:0::1;19893:14;:21:::0;;-1:-1:-1;;;;19925:18:0;-1:-1:-1;;;19925:18:0;;;19976:12:::1;19954:19;:34:::0;19999:13:::1;:22:::0;;;20037:16:::1;::::0;::::1;::::0;-1:-1:-1;;20037:16:0::1;19701:360:::0;:::o;25899:381::-;7938:6;;25986:10;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26017:20:0;::::1;26009:59;;;::::0;-1:-1:-1;;;26009:59:0;;13439:2:1;26009:59:0::1;::::0;::::1;13421:21:1::0;13478:2;13458:18;;;13451:30;13517:28;13497:18;;;13490:56;13563:18;;26009:59:0::1;13237:350:1::0;26009:59:0::1;26106:39;::::0;-1:-1:-1;;;26106:39:0;;26139:4:::1;26106:39;::::0;::::1;1428:51:1::0;26079:24:0::1;::::0;-1:-1:-1;;;;;26106:24:0;::::1;::::0;::::1;::::0;1401:18:1;;26106:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26164:46;::::0;-1:-1:-1;;;26164:46:0;;-1:-1:-1;;;;;13973:32:1;;;26164:46:0::1;::::0;::::1;13955:51:1::0;14022:18;;;14015:34;;;26079:66:0;;-1:-1:-1;26164:23:0;;::::1;::::0;::::1;::::0;13928:18:1;;26164:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26226;::::0;;-1:-1:-1;;;;;13973:32:1;;13955:51;;14037:2;14022:18;;14015:34;;;26156:54:0;;-1:-1:-1;26226:46:0::1;::::0;13928:18:1;26226:46:0::1;;;;;;;25998:282;25899:381:::0;;;;:::o;26526:289::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26620:31:0;::::1;26612:81;;;::::0;-1:-1:-1;;;26612:81:0;;14512:2:1;26612:81:0::1;::::0;::::1;14494:21:1::0;14551:2;14531:18;;;14524:30;14590:34;14570:18;;;14563:62;-1:-1:-1;;;14641:18:1;;;14634:35;14686:19;;26612:81:0::1;14310:401:1::0;26612:81:0::1;26704:16;:45:::0;;-1:-1:-1;;;;;;26704:45:0::1;-1:-1:-1::0;;;;;26704:45:0;::::1;::::0;;::::1;::::0;;;26765:42:::1;::::0;::::1;::::0;-1:-1:-1;;26765:42:0::1;26526:289:::0;:::o;4052:104::-;4108:13;4141:7;4134:14;;;;;:::i;14092:244::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;14201:13:::1;-1:-1:-1::0;;;;;14193:21:0::1;:4;-1:-1:-1::0;;;;;14193:21:0::1;;;14185:91;;;::::0;-1:-1:-1;;;14185:91:0;;14918:2:1;14185:91:0::1;::::0;::::1;14900:21:1::0;14957:2;14937:18;;;14930:30;14996:34;14976:18;;;14969:62;15067:27;15047:18;;;15040:55;15112:19;;14185:91:0::1;14716:421:1::0;14185:91:0::1;14287:41;14316:4;14322:5;14287:28;:41::i;:::-;14092:244:::0;;:::o;5758:413::-;173:10;5851:4;5895:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5895:34:0;;;;;;;;;;5948:35;;;;5940:85;;;;-1:-1:-1;;;5940:85:0;;15344:2:1;5940:85:0;;;15326:21:1;15383:2;15363:18;;;15356:30;15422:34;15402:18;;;15395:62;-1:-1:-1;;;15473:18:1;;;15466:35;15518:19;;5940:85:0;15142:401:1;5940:85:0;6061:67;173:10;6084:7;6112:15;6093:16;:34;6061:8;:67::i;:::-;-1:-1:-1;6159:4:0;;5758:413;-1:-1:-1;;;5758:413:0:o;4516:175::-;4602:4;4619:42;173:10;4643:9;4654:6;4619:9;:42::i;13874:182::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13959:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;13959:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14014:34;;1212:41:1;;;14014:34:0::1;::::0;1185:18:1;14014:34:0::1;;;;;;;13874:182:::0;;:::o;23938:410::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;24063:16:::1;:32:::0;;;24106:16:::1;:32:::0;;;24149:18:::1;:36:::0;;;24170:15;24212:35:::1;24125:13:::0;24082;24212:35:::1;:::i;:::-;:56;;;;:::i;:::-;24196:13;:72:::0;;;-1:-1:-1;24287:19:0::1;24279:61;;;::::0;-1:-1:-1;;;24279:61:0;;15750:2:1;24279:61:0::1;::::0;::::1;15732:21:1::0;15789:2;15769:18;;;15762:30;15828:31;15808:18;;;15801:59;15877:18;;24279:61:0::1;15548:353:1::0;22138:286:0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;22268:6:::1;22260:4;22240:13;4353:12:::0;;;4265:108;22240:13:::1;:17;::::0;22256:1:::1;22240:17;:::i;:::-;:24;;;;:::i;:::-;22239:35;;;;:::i;:::-;22226:9;:48;;22218:94;;;::::0;-1:-1:-1;;;22218:94:0;;16108:2:1;22218:94:0::1;::::0;::::1;16090:21:1::0;16147:2;16127:18;;;16120:30;16186:34;16166:18;;;16159:62;-1:-1:-1;;;16237:18:1;;;16230:31;16278:19;;22218:94:0::1;15906:397:1::0;22218:94:0::1;22341:20;:9:::0;22354:6:::1;22341:20;:::i;:::-;22323:15;:38:::0;;;22377:39:::1;::::0;1636:25:1;;;22377:39:0::1;::::0;1624:2:1;1609:18;22377:39:0::1;1490:177:1::0;20442:173:0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;20524:6:::1;20519:89;20540:5;:12;20536:1;:16;20519:89;;;20592:4;20574:5;:15;20580:5;20586:1;20580:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20574:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20574:15:0;:22;;-1:-1:-1;;20574:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20554:3;::::1;::::0;::::1;:::i;:::-;;;;20519:89;;22532:415:::0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;22666:6:::1;22656;22636:13;4353:12:::0;;;4265:108;22636:13:::1;:17;::::0;22652:1:::1;22636:17;:::i;:::-;:26;;;;:::i;:::-;22635:37;;;;:::i;:::-;22622:9;:50;;22614:103;;;::::0;-1:-1:-1;;;22614:103:0;;16510:2:1;22614:103:0::1;::::0;::::1;16492:21:1::0;16549:2;16529:18;;;16522:30;16588:34;16568:18;;;16561:62;-1:-1:-1;;;16639:18:1;;;16632:38;16687:19;;22614:103:0::1;16308:404:1::0;22614:103:0::1;22778:6;22770:4;22750:13;4353:12:::0;;;4265:108;22750:13:::1;:17;::::0;22766:1:::1;22750:17;:::i;:::-;:24;;;;:::i;:::-;22749:35;;;;:::i;:::-;22736:9;:48;;22728:100;;;::::0;-1:-1:-1;;;22728:100:0;;16919:2:1;22728:100:0::1;::::0;::::1;16901:21:1::0;16958:2;16938:18;;;16931:30;16997:34;16977:18;;;16970:62;-1:-1:-1;;;17048:18:1;;;17041:37;17095:19;;22728:100:0::1;16717:403:1::0;22728:100:0::1;22859:20;:9:::0;22872:6:::1;22859:20;:::i;:::-;22838:18;:41:::0;;;22895:45:::1;::::0;1636:25:1;;;22895:45:0::1;::::0;1624:2:1;1609:18;22895:45:0::1;1490:177:1::0;21821:276:0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;21949:6:::1;21941:4;21921:13;4353:12:::0;;;4265:108;21921:13:::1;:17;::::0;21937:1:::1;21921:17;:::i;:::-;:24;;;;:::i;:::-;21920:35;;;;:::i;:::-;21907:9;:48;;21899:92;;;::::0;-1:-1:-1;;;21899:92:0;;17327:2:1;21899:92:0::1;::::0;::::1;17309:21:1::0;17366:2;17346:18;;;17339:30;17405:33;17385:18;;;17378:61;17456:18;;21899:92:0::1;17125:355:1::0;21899:92:0::1;22018:20;:9:::0;22031:6:::1;22018:20;:::i;:::-;22002:13;:36:::0;;;22054:35:::1;::::0;1636:25:1;;;22054:35:0::1;::::0;1624:2:1;1609:18;22054:35:0::1;1490:177:1::0;20299:98:0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;20361:20:::1;:28:::0;;-1:-1:-1;;;;20361:28:0::1;::::0;;20299:98::o;20654:177::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;20739:6:::1;20734:90;20755:5;:12;20751:1;:16;20734:90;;;20807:5;20789;:15;20795:5;20801:1;20795:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;20789:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;20789:15:0;:23;;-1:-1:-1;;20789:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20769:3;::::1;::::0;::::1;:::i;:::-;;;;20734:90;;8183:244:::0;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8272:22:0;::::1;8264:73;;;::::0;-1:-1:-1;;;8264:73:0;;17687:2:1;8264:73:0::1;::::0;::::1;17669:21:1::0;17726:2;17706:18;;;17699:30;17765:34;17745:18;;;17738:62;-1:-1:-1;;;17816:18:1;;;17809:36;17862:19;;8264:73:0::1;17485:402:1::0;8264:73:0::1;8374:6;::::0;8353:38:::1;::::0;-1:-1:-1;;;;;8353:38:0;;::::1;::::0;8374:6:::1;::::0;8353:38:::1;::::0;8374:6:::1;::::0;8353:38:::1;8402:6;:17:::0;;-1:-1:-1;;;;;;8402:17:0::1;-1:-1:-1::0;;;;;8402:17:0;;;::::1;::::0;;;::::1;::::0;;8183:244::o;26315:160::-;7938:6;;-1:-1:-1;;;;;7938:6:0;173:10;7938:22;7930:67;;;;-1:-1:-1;;;7930:67:0;;;;;;;:::i;:::-;26409:58:::1;::::0;26373:12:::1;::::0;26417:10:::1;::::0;26441:21:::1;::::0;26373:12;26409:58;26373:12;26409:58;26441:21;26417:10;26409:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26315:160:0:o;7100:380::-;-1:-1:-1;;;;;7236:19:0;;7228:68;;;;-1:-1:-1;;;7228:68:0;;18304:2:1;7228:68:0;;;18286:21:1;18343:2;18323:18;;;18316:30;18382:34;18362:18;;;18355:62;-1:-1:-1;;;18433:18:1;;;18426:34;18477:19;;7228:68:0;18102:400:1;7228:68:0;-1:-1:-1;;;;;7315:21:0;;7307:68;;;;-1:-1:-1;;;7307:68:0;;18709:2:1;7307:68:0;;;18691:21:1;18748:2;18728:18;;;18721:30;18787:34;18767:18;;;18760:62;-1:-1:-1;;;18838:18:1;;;18831:32;18880:19;;7307:68:0;18507:398:1;7307:68:0;-1:-1:-1;;;;;7388:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7440:32;;1636:25:1;;;7440:32:0;;1609:18:1;7440:32:0;;;;;;;7100:380;;;:::o;15539:4087::-;-1:-1:-1;;;;;15637:18:0;;15629:68;;;;-1:-1:-1;;;15629:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15716:16:0;;15708:64;;;;-1:-1:-1;;;15708:64:0;;;;;;;:::i;:::-;15800:1;15791:6;:10;15783:52;;;;-1:-1:-1;;;15783:52:0;;19922:2:1;15783:52:0;;;19904:21:1;19961:2;19941:18;;;19934:30;20000:31;19980:18;;;19973:59;20049:18;;15783:52:0;19720:353:1;15783:52:0;-1:-1:-1;;;;;15854:20:0;;;;;;:14;:20;;;;;;15877:15;-1:-1:-1;15846:62:0;;;;-1:-1:-1;;;15846:62:0;;20280:2:1;15846:62:0;;;20262:21:1;20319:2;20299:18;;;20292:30;-1:-1:-1;;;20338:18:1;;;20331:41;20389:18;;15846:62:0;20078:335:1;15846:62:0;-1:-1:-1;;;;;15928:11:0;;;;;;:5;:11;;;;;;;;15927:12;15919:31;;;;-1:-1:-1;;;15919:31:0;;20620:2:1;15919:31:0;;;20602:21:1;20659:1;20639:18;;;20632:29;-1:-1:-1;;;20677:18:1;;;20670:36;20723:18;;15919:31:0;20418:329:1;15919:31:0;16016:13;;-1:-1:-1;;;16016:13:0;;;;16012:1582;;;7876:6;;-1:-1:-1;;;;;16050:15:0;;;7876:6;;16050:15;;;;:32;;-1:-1:-1;7876:6:0;;-1:-1:-1;;;;;16069:13:0;;;7876:6;;16069:13;;16050:32;:52;;;;-1:-1:-1;;;;;;16086:16:0;;;;16050:52;:77;;;;-1:-1:-1;;;;;;16106:21:0;;16120:6;16106:21;;16050:77;16046:1537;;;16153:14;;-1:-1:-1;;;16153:14:0;;;;16148:164;;16216:15;-1:-1:-1;;;;;16200:32:0;:4;-1:-1:-1;;;;;16200:32:0;;;:66;;;;;16252:13;-1:-1:-1;;;;;16236:30:0;:4;-1:-1:-1;;;;;16236:30:0;;;16200:66;16192:100;;;;-1:-1:-1;;;16192:100:0;;20954:2:1;16192:100:0;;;20936:21:1;20993:2;20973:18;;;20966:30;-1:-1:-1;;;21012:18:1;;;21005:51;21073:18;;16192:100:0;20752:345:1;16192:100:0;16336:20;;-1:-1:-1;;;16336:20:0;;;;16332:519;;;16399:15;-1:-1:-1;;;;;16385:30:0;:2;-1:-1:-1;;;;;16385:30:0;;;:62;;;;;16433:13;-1:-1:-1;;;;;16419:28:0;:2;-1:-1:-1;;;;;16419:28:0;;;16385:62;16381:451;;;16526:16;16541:1;16526:12;:16;:::i;:::-;16513:9;16484:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;16581:16:0;16596:1;16581:12;:16;:::i;:::-;-1:-1:-1;;;;;16546:32:0;;;;;;:28;:32;;;;;;:51;16484:113;16476:177;;;;-1:-1:-1;;;16476:177:0;;21434:2:1;16476:177:0;;;21416:21:1;21473:2;21453:18;;;21446:30;21512:34;21492:18;;;21485:62;-1:-1:-1;;;21563:18:1;;;21556:49;21622:19;;16476:177:0;21232:415:1;16476:177:0;16709:9;16680:39;;;;:28;:39;;;;;;16722:12;16680:54;;;;-1:-1:-1;;;;;16761:32:0;;;;;;:47;16381:451;-1:-1:-1;;;;;16875:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;16911:35:0;;;;;;:31;:35;;;;;;;;16910:36;16875:71;16871:697;;;16989:12;;16979:6;:22;;16971:74;;;;-1:-1:-1;;;16971:74:0;;21854:2:1;16971:74:0;;;21836:21:1;21893:2;21873:18;;;21866:30;21932:34;21912:18;;;21905:62;-1:-1:-1;;;21983:18:1;;;21976:37;22030:19;;16971:74:0;21652:403:1;16971:74:0;17102:15;;-1:-1:-1;;;;;4482:18:0;;4455:7;4482:18;;;;;;;;;;;17076:22;;:6;:22;:::i;:::-;:41;;17068:72;;;;-1:-1:-1;;;17068:72:0;;22262:2:1;17068:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17068:72:0;22060:342:1;17068:72:0;16871:697;;;-1:-1:-1;;;;;17170:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;17204:37:0;;;;;;:31;:37;;;;;;;;17203:38;17170:71;17166:402;;;17284:13;;17274:6;:23;;17266:77;;;;-1:-1:-1;;;17266:77:0;;22609:2:1;17266:77:0;;;22591:21:1;22648:2;22628:18;;;22621:30;22687:34;22667:18;;;22660:62;-1:-1:-1;;;22738:18:1;;;22731:39;22787:19;;17266:77:0;22407:405:1;17166:402:0;-1:-1:-1;;;;;17374:35:0;;;;;;:31;:35;;;;;;;;17373:36;:78;;;;-1:-1:-1;;;;;;17414:37:0;;;;;;:31;:37;;;;;;;;17413:38;17373:78;17369:199;;;17510:15;;-1:-1:-1;;;;;4482:18:0;;4455:7;4482:18;;;;;;;;;;;17484:22;;:6;:22;:::i;:::-;:41;;17476:72;;;;-1:-1:-1;;;17476:72:0;;22262:2:1;17476:72:0;;;22244:21:1;22301:2;22281:18;;;22274:30;-1:-1:-1;;;22320:18:1;;;22313:48;22378:18;;17476:72:0;22060:342:1;17476:72:0;17655:4;17606:28;4482:18;;;;;;;;;;;17711;;17687:42;;;;;;;17854:22;;-1:-1:-1;17865:11:0;;-1:-1:-1;;;17865:11:0;;;;17854:22;:58;;;;-1:-1:-1;;;;;;17881:31:0;;;;;;:25;:31;;;;;;;;17880:32;17854:58;:88;;;;-1:-1:-1;;;;;;17917:25:0;;;;;;:19;:25;;;;;;;;17916:26;17854:88;:116;;;;-1:-1:-1;;;;;;17947:23:0;;;;;;:19;:23;;;;;;;;17946:24;17854:116;17850:159;;;17987:10;:8;:10::i;:::-;-1:-1:-1;;;;;18106:25:0;;;;;;:19;:25;;;;;;;;18105:26;:54;;;;-1:-1:-1;;;;;;18136:23:0;;;;;;:19;:23;;;;;;;;18135:24;18105:54;18101:1474;;;18176:12;18207:21;18289:13;;18266:19;;18251:12;:34;;;;:::i;:::-;:51;;:86;;;;-1:-1:-1;;;;;;18306:31:0;;;;;;:25;:31;;;;;;;;18251:86;18247:1153;;;18388:3;18374:11;:6;18383:2;18374:11;:::i;:::-;:17;;;;:::i;:::-;18432:16;;18358:33;;-1:-1:-1;18410:54:0;;18426:4;;-1:-1:-1;;;;;18432:16:0;18358:33;18410:15;:54::i;:::-;18247:1153;;;-1:-1:-1;;;;;18490:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;18540:1;18525:12;;:16;18490:51;18486:914;;;18603:13;;18581:19;;18566:34;;:12;:34;:::i;:::-;:50;;;;:::i;:::-;18620:1;18566:55;18562:162;;;-1:-1:-1;;;;;18646:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;18646:16:0;18658:4;18646:16;;;18690:14;;1428:51:1;;;18690:14:0;;1401:18:1;18690:14:0;;;;;;;18562:162;18770:3;18755:12;;18746:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;18739:34;;18836:12;;18818:15;;18811:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;18789:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18914:12:0;;18896:15;;18889:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;18867:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;18996:12:0;;18976:17;;18969:24;;:4;:24;:::i;:::-;:39;;;;:::i;:::-;18945:20;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;18486:914:0;;-1:-1:-1;18486:914:0;;-1:-1:-1;;;;;19034:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;19083:1;19067:13;;:17;19034:50;19030:370;;;19137:3;19121:13;;19112:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;19105:35;;19207:13;;19188:16;;19181:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;19159:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19287:13:0;;19268:16;;19261:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;19239:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;19371:13:0;;19350:18;;19343:25;;:4;:25;:::i;:::-;:41;;;;:::i;:::-;19319:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;19030:370:0;19420:8;;19416:95;;19453:42;19469:4;19483;19490;19453:15;:42::i;:::-;19543:20;19550:13;19543:4;:20;:::i;:::-;19533:30;;;;:::i;:::-;;;18161:1414;;18101:1474;19585:33;19601:4;19607:2;19611:6;19585:15;:33::i;:::-;15618:4008;;15539:4087;;;:::o;14344:236::-;-1:-1:-1;;;;;14427:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;14427:39:0;;;;;;;14477;14427:31;:39;14477:26;:39::i;:::-;14532:40;;;;;;-1:-1:-1;;;;;14532:40:0;;;;;;;;14344:236;;:::o;24383:1472::-;24466:4;24422:23;4482:18;;;;;;;;;;;24422:50;;24483:25;24553:20;;24532:18;;24511;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;24483:90;-1:-1:-1;24598:20:0;;;:46;;-1:-1:-1;24622:22:0;;24598:46;24594:85;;;24661:7;;24383:1472::o;24594:85::-;24713:18;;:23;;24734:2;24713:23;:::i;:::-;24695:15;:41;24691:115;;;24771:18;;:23;;24792:2;24771:23;:::i;:::-;24753:41;;24691:115;24818:12;24841:23;24926:1;24906:17;24885:18;;24867:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;24841:86;-1:-1:-1;24948:51:0;24965:33;24841:86;24965:15;:33;:::i;:::-;24948:16;:51::i;:::-;25203:18;;25042:21;;;;25021:18;;25203:22;;25224:1;;25203:22;:::i;:::-;25182:44;;:17;:44;:::i;:::-;25160:18;;25147:31;;:10;:31;:::i;:::-;:80;;;;:::i;:::-;25121:106;;25238:25;25345:1;25324:18;;:22;;;;:::i;:::-;25303:44;;:17;:44;:::i;:::-;25279:20;;25266:33;;:10;:33;:::i;:::-;:82;;;;:::i;:::-;25238:110;-1:-1:-1;25380:35:0;25238:110;25380:15;:35;:::i;:::-;25361:54;;;;:::i;:::-;25461:1;25440:18;:22;;;25473:18;:22;;;25506:20;:24;25361:54;-1:-1:-1;25555:19:0;;;;;:42;;;25596:1;25578:15;:19;25555:42;25551:121;;;25614:46;25627:15;25644;25614:12;:46::i;:::-;25705:18;;25697:62;;-1:-1:-1;;;;;25705:18:0;;;;25737:17;;25697:62;;;;25737:17;25705:18;25697:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25791:16:0;;25783:64;;25684:75;;-1:-1:-1;;;;;;25791:16:0;;25821:21;;25783:64;;;;25821:21;25791:16;25783:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24383:1472:0:o;6179:614::-;-1:-1:-1;;;;;6319:20:0;;6311:70;;;;-1:-1:-1;;;6311:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6400:23:0;;6392:71;;;;-1:-1:-1;;;6392:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6500:17:0;;6476:21;6500:17;;;;;;;;;;;6536:23;;;;6528:74;;;;-1:-1:-1;;;6528:74:0;;23019:2:1;6528:74:0;;;23001:21:1;23058:2;23038:18;;;23031:30;23097:34;23077:18;;;23070:62;-1:-1:-1;;;23148:18:1;;;23141:36;23194:19;;6528:74:0;22817:402:1;6528:74:0;-1:-1:-1;;;;;6638:17:0;;;:9;:17;;;;;;;;;;;6658:22;;;6638:42;;6702:20;;;;;;;;:30;;6674:6;;6638:9;6702:30;;6674:6;;6702:30;:::i;:::-;;;;;;;;6767:9;-1:-1:-1;;;;;6750:35:0;6759:6;-1:-1:-1;;;;;6750:35:0;;6778:6;6750:35;;;;1636:25:1;;1624:2;1609:18;;1490:177;6750:35:0;;;;;;;;6300:493;6179:614;;;:::o;13610:207::-;-1:-1:-1;;;;;13698:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;13698:52:0;;;;;;;;;;13766:43;;23392:51:1;;;23459:18;;;23452:50;13766:43:0;;23365:18:1;13766:43:0;;;;;;;13610:207;;:::o;15036:471::-;15126:16;;;15140:1;15126:16;;;;;;;;15102:21;;15126:16;;;;;;;;;;-1:-1:-1;15126:16:0;15102:40;;15171:4;15153;15158:1;15153:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15153:23:0;;;-1:-1:-1;;;;;15153:23:0;;;;;15197:15;-1:-1:-1;;;;;15197:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15187:4;15192:1;15187:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;15187:32:0;;;-1:-1:-1;;;;;15187:32:0;;;;;15230:62;15247:4;15262:15;15280:11;15230:8;:62::i;:::-;15303:196;;-1:-1:-1;;;15303:196:0;;-1:-1:-1;;;;;15303:15:0;:66;;;;:196;;15384:11;;15410:1;;15426:4;;15453;;15473:15;;15303:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15091:416;15036:471;:::o;14626:368::-;14707:62;14724:4;14739:15;14757:11;14707:8;:62::i;:::-;14780:206;;-1:-1:-1;;;14780:206:0;;14852:4;14780:206;;;25095:34:1;25145:18;;;25138:34;;;14898:1:0;25188:18:1;;;25181:34;;;25231:18;;;25224:34;14938:6:0;25274:19:1;;;25267:44;14960:15:0;25327:19:1;;;25320:35;14780:15:0;-1:-1:-1;;;;;14780:31:0;;;;14819:9;;25029:19:1;;14780:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1672:127::-;1733:10;1728:3;1724:20;1721:1;1714:31;1764:4;1761:1;1754:15;1788:4;1785:1;1778:15;1804:275;1875:2;1869:9;1940:2;1921:13;;-1:-1:-1;;1917:27:1;1905:40;;1975:18;1960:34;;1996:22;;;1957:62;1954:88;;;2022:18;;:::i;:::-;2058:2;2051:22;1804:275;;-1:-1:-1;1804:275:1:o;2084:183::-;2144:4;2177:18;2169:6;2166:30;2163:56;;;2199:18;;:::i;:::-;-1:-1:-1;2244:1:1;2240:14;2256:4;2236:25;;2084:183::o;2272:737::-;2326:5;2379:3;2372:4;2364:6;2360:17;2356:27;2346:55;;2397:1;2394;2387:12;2346:55;2433:6;2420:20;2459:4;2483:60;2499:43;2539:2;2499:43;:::i;:::-;2483:60;:::i;:::-;2577:15;;;2663:1;2659:10;;;;2647:23;;2643:32;;;2608:12;;;;2687:15;;;2684:35;;;2715:1;2712;2705:12;2684:35;2751:2;2743:6;2739:15;2763:217;2779:6;2774:3;2771:15;2763:217;;;2859:3;2846:17;2876:31;2901:5;2876:31;:::i;:::-;2920:18;;2958:12;;;;2796;;2763:217;;;-1:-1:-1;2998:5:1;2272:737;-1:-1:-1;;;;;;2272:737:1:o;3014:1138::-;3132:6;3140;3193:2;3181:9;3172:7;3168:23;3164:32;3161:52;;;3209:1;3206;3199:12;3161:52;3249:9;3236:23;3278:18;3319:2;3311:6;3308:14;3305:34;;;3335:1;3332;3325:12;3305:34;3358:61;3411:7;3402:6;3391:9;3387:22;3358:61;:::i;:::-;3348:71;;3438:2;3428:12;;3493:2;3482:9;3478:18;3465:32;3522:2;3512:8;3509:16;3506:36;;;3538:1;3535;3528:12;3506:36;3561:24;;;-1:-1:-1;3616:4:1;3608:13;;3604:27;-1:-1:-1;3594:55:1;;3645:1;3642;3635:12;3594:55;3681:2;3668:16;3704:60;3720:43;3760:2;3720:43;:::i;3704:60::-;3798:15;;;3880:1;3876:10;;;;3868:19;;3864:28;;;3829:12;;;;3904:19;;;3901:39;;;3936:1;3933;3926:12;3901:39;3960:11;;;;3980:142;3996:6;3991:3;3988:15;3980:142;;;4062:17;;4050:30;;4013:12;;;;4100;;;;3980:142;;;4141:5;4131:15;;;;;;;3014:1138;;;;;:::o;4157:456::-;4234:6;4242;4250;4303:2;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;4358:9;4345:23;4377:31;4402:5;4377:31;:::i;:::-;4427:5;-1:-1:-1;4484:2:1;4469:18;;4456:32;4497:33;4456:32;4497:33;:::i;:::-;4157:456;;4549:7;;-1:-1:-1;;;4603:2:1;4588:18;;;;4575:32;;4157:456::o;4618:247::-;4677:6;4730:2;4718:9;4709:7;4705:23;4701:32;4698:52;;;4746:1;4743;4736:12;4698:52;4785:9;4772:23;4804:31;4829:5;4804:31;:::i;:::-;4854:5;4618:247;-1:-1:-1;;;4618:247:1:o;4870:180::-;4929:6;4982:2;4970:9;4961:7;4957:23;4953:32;4950:52;;;4998:1;4995;4988:12;4950:52;-1:-1:-1;5021:23:1;;4870:180;-1:-1:-1;4870:180:1:o;5452:118::-;5538:5;5531:13;5524:21;5517:5;5514:32;5504:60;;5560:1;5557;5550:12;5575:382;5640:6;5648;5701:2;5689:9;5680:7;5676:23;5672:32;5669:52;;;5717:1;5714;5707:12;5669:52;5756:9;5743:23;5775:31;5800:5;5775:31;:::i;:::-;5825:5;-1:-1:-1;5882:2:1;5867:18;;5854:32;5895:30;5854:32;5895:30;:::i;:::-;5944:7;5934:17;;;5575:382;;;;;:::o;5962:316::-;6039:6;6047;6055;6108:2;6096:9;6087:7;6083:23;6079:32;6076:52;;;6124:1;6121;6114:12;6076:52;-1:-1:-1;;6147:23:1;;;6217:2;6202:18;;6189:32;;-1:-1:-1;6268:2:1;6253:18;;;6240:32;;5962:316;-1:-1:-1;5962:316:1:o;6283:388::-;6351:6;6359;6412:2;6400:9;6391:7;6387:23;6383:32;6380:52;;;6428:1;6425;6418:12;6380:52;6467:9;6454:23;6486:31;6511:5;6486:31;:::i;:::-;6536:5;-1:-1:-1;6593:2:1;6578:18;;6565:32;6606:33;6565:32;6606:33;:::i;6676:348::-;6760:6;6813:2;6801:9;6792:7;6788:23;6784:32;6781:52;;;6829:1;6826;6819:12;6781:52;6869:9;6856:23;6902:18;6894:6;6891:30;6888:50;;;6934:1;6931;6924:12;6888:50;6957:61;7010:7;7001:6;6990:9;6986:22;6957:61;:::i;:::-;6947:71;6676:348;-1:-1:-1;;;;6676:348:1:o;7029:380::-;7108:1;7104:12;;;;7151;;;7172:61;;7226:4;7218:6;7214:17;7204:27;;7172:61;7279:2;7271:6;7268:14;7248:18;7245:38;7242:161;;;7325:10;7320:3;7316:20;7313:1;7306:31;7360:4;7357:1;7350:15;7388:4;7385:1;7378:15;7242:161;;7029:380;;;:::o;7414:356::-;7616:2;7598:21;;;7635:18;;;7628:30;7694:34;7689:2;7674:18;;7667:62;7761:2;7746:18;;7414:356::o;8557:127::-;8618:10;8613:3;8609:20;8606:1;8599:31;8649:4;8646:1;8639:15;8673:4;8670:1;8663:15;8689:127;8750:10;8745:3;8741:20;8738:1;8731:31;8781:4;8778:1;8771:15;8805:4;8802:1;8795:15;8821:168;8861:7;8927:1;8923;8919:6;8915:14;8912:1;8909:21;8904:1;8897:9;8890:17;8886:45;8883:71;;;8934:18;;:::i;:::-;-1:-1:-1;8974:9:1;;8821:168::o;8994:135::-;9033:3;-1:-1:-1;;9054:17:1;;9051:43;;;9074:18;;:::i;:::-;-1:-1:-1;9121:1:1;9110:13;;8994:135::o;9951:217::-;9991:1;10017;10007:132;;10061:10;10056:3;10052:20;10049:1;10042:31;10096:4;10093:1;10086:15;10124:4;10121:1;10114:15;10007:132;-1:-1:-1;10153:9:1;;9951:217::o;11632:128::-;11672:3;11703:1;11699:6;11696:1;11693:13;11690:39;;;11709:18;;:::i;:::-;-1:-1:-1;11745:9:1;;11632:128::o;13592:184::-;13662:6;13715:2;13703:9;13694:7;13690:23;13686:32;13683:52;;;13731:1;13728;13721:12;13683:52;-1:-1:-1;13754:16:1;;13592:184;-1:-1:-1;13592:184:1:o;14060:245::-;14127:6;14180:2;14168:9;14159:7;14155:23;14151:32;14148:52;;;14196:1;14193;14186:12;14148:52;14228:9;14222:16;14247:28;14269:5;14247:28;:::i;18910:401::-;19112:2;19094:21;;;19151:2;19131:18;;;19124:30;19190:34;19185:2;19170:18;;19163:62;-1:-1:-1;;;19256:2:1;19241:18;;19234:35;19301:3;19286:19;;18910:401::o;19316:399::-;19518:2;19500:21;;;19557:2;19537:18;;;19530:30;19596:34;19591:2;19576:18;;19569:62;-1:-1:-1;;;19662:2:1;19647:18;;19640:33;19705:3;19690:19;;19316:399::o;21102:125::-;21142:4;21170:1;21167;21164:8;21161:34;;;21175:18;;:::i;:::-;-1:-1:-1;21212:9:1;;21102:125::o;23513:251::-;23583:6;23636:2;23624:9;23615:7;23611:23;23607:32;23604:52;;;23652:1;23649;23642:12;23604:52;23684:9;23678:16;23703:31;23728:5;23703:31;:::i;23769:980::-;24031:4;24079:3;24068:9;24064:19;24110:6;24099:9;24092:25;24136:2;24174:6;24169:2;24158:9;24154:18;24147:34;24217:3;24212:2;24201:9;24197:18;24190:31;24241:6;24276;24270:13;24307:6;24299;24292:22;24345:3;24334:9;24330:19;24323:26;;24384:2;24376:6;24372:15;24358:29;;24405:1;24415:195;24429:6;24426:1;24423:13;24415:195;;;24494:13;;-1:-1:-1;;;;;24490:39:1;24478:52;;24585:15;;;;24550:12;;;;24526:1;24444:9;24415:195;;;-1:-1:-1;;;;;;;24666:32:1;;;;24661:2;24646:18;;24639:60;-1:-1:-1;;;24730:3:1;24715:19;24708:35;24627:3;23769:980;-1:-1:-1;;;23769:980:1:o;25366:306::-;25454:6;25462;25470;25523:2;25511:9;25502:7;25498:23;25494:32;25491:52;;;25539:1;25536;25529:12;25491:52;25568:9;25562:16;25552:26;;25618:2;25607:9;25603:18;25597:25;25587:35;;25662:2;25651:9;25647:18;25641:25;25631:35;;25366:306;;;;;:::o

Swarm Source

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