ETH Price: $2,436.60 (+3.34%)
Gas: 1.57 Gwei

Token

Speecher Inu (SPEECHER)
 

Overview

Max Total Supply

100,000,000 SPEECHER

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
le-chiffre.eth
Balance
0 SPEECHER

Value
$0.00
0xe9765653e69cd3efe80aabbc6fec91146f2674c5
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:
SpeecherInu

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-27
*/

// SPDX-License-Identifier: MIT

/**
 * SPEECHER Inu
 * ==================================================
 *
 * "Ultimately, saying that you don't care about privacy because you have nothing to hide is no 
 * different from saying you don't care about freedom of speech because you have nothing to say"
 * - Edward Snowden, Permanent Record
 *
 * SPEECHER celebrates the forthcoming victory for freedom of speech plus the spirit of decentralization 
 * and community through releasing a safe, lower trade tax token whose Treasury funds are spent according
 * to community suggestions received via tweet replies.
 * 
 * SPEECHER is entirely run from that digital town called Twitter. Once there, to say hi, hit Reply.
 *
 * However, if anyone wishes to create a SPEECHER Telegram group, simply send us the link via Twitter and 
 * we'll gladly announce its existence.
 *
 * Twitter: https://twitter.com/_SPEECHER
 *
 * Elon's latest tweet, which couldn't be finer: https://twitter.com/elonmusk/status/1519036983137509376
 *
 * Tokenomics
 * ==================================================
 *
 * With No.8 symbolising infinite perfection, SPEECHER's tokenomics came to pass:
 *
 * BUY & SELL
 *
 * Treasury: 3%
 * Auto Liquidity: 1%
 * Ecosystem: 4%
 *
 * Total Per Swap: 8%
 *
 * Trade Settings
 * ==================================================
 *
 * Max Transaction: 750000 / 0.75%
 * Max Wallet: 1000000 / 1%
 *
 * Limits shall be lifted shortly after launch.
 *
 * Wallet to wallet transfers are not subject to tax.
 *
 * Security & Transparency
 * ==================================================
 *
 * This contract was built with safety in mind:
 *
 * The contract is renounced soon after launch but any contract configuration settings accessible before 
 * were built to be safe too; liquidity is locked for two weeks then soon extended; the trade tax cannot 
 * be altered (hardcoded); the Max Transaction cannot be lowered, only increased; the Max Wallet cannot 
 * be lowered, only increased; bots/addresses cannot be blacklisted 10 minutes past launch, plus only 
 * non-critical addresses can be blacklisted; no team tokens or preloaded wallets aka a fair launch.
 *
 * In short, there is no technical way to honeypot or scam, and no possibility to rug once liquidity is 
 * locked. But don't trust our words alone, seek outside opinions to verify and reassure.
 *
 * For complete separation of concerns and full transparency, the Treasury and Ecosystem funds have 
 * their own separate wallets, which are:
 *
 * Treasury: 0x0182ec9758175F72b70546213321E6111470Dc5f
 * Ecosystem: 0x034e690237b5ce205EcA4a4e40A3a2a76587aA2D
 *
 * The Twitter community decide how Treasury funds are spent e.g. donations to good causes.
 *
 * Ecosystem funds are allocated to any marketing and team payments.
 *
 * Let the good times tweet.
 */

pragma solidity ^0.8.0;

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

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();

        _transfer(owner, to, 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) {
        address owner = _msgSender();

        _approve(owner, spender, amount);

        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();

        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();

        _approve(owner, spender, allowance(owner, spender) + addedValue);

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);

        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");

        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        uint256 fromBalance = _balances[from];

        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

        unchecked {
            _balances[from] = fromBalance - amount;
        }

        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }

    function _mint(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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];

        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        unchecked {
            _balances[account] = accountBalance - amount;
        }

        _totalSupply -= amount;

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

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

        _allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);

        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");

            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;

        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IDexRouter {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract SpeecherInu is Context, ERC20, Ownable {
    // DEX
    IDexRouter public dexRouter;
    address public dexPair;

    // Wallets
    address public treasuryWallet;
    address public ecosystemWallet;

    // Trade settings
    bool public swapEnabled = false;
    bool public limitsEnabled = false;
    bool private _tradingEnabled = false;

    bool public transferDelayEnabled = true;
    uint256 private _transferDelayBlocks = 2;
    mapping(address => uint256) private _lastTransferBlock;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletAmount;
    uint256 public swapTokensAmount;

    // Trade tax
    uint256 public buyTreasuryFee = 3;
    uint256 public buyLiquidityFee = 1;
    uint256 public buyEcosystemFee = 4;
    uint256 public buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyEcosystemFee;

    uint256 public sellTreasuryFee = 3;
    uint256 public sellLiquidityFee = 1;
    uint256 public sellEcosystemFee = 4;
    uint256 public sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellEcosystemFee;

    uint256 private _tokensForTreasury = 0;
    uint256 private _tokensForLiquidity = 0;
    uint256 private _tokensForEcosystem = 0;

    // Fees and max TX exclusions
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTx;

    // Anti-bot
    bool public antiBotEnabled = true;
    mapping(address => bool) private _bots;
    uint256 private _launchTime = 0;
    uint256 private _launchBlock = 0;
    uint256 private _botBlocks = 1;
    uint256 private _botSeconds = 10;
    uint256 public totalBots = 0;

    // Reentrancy
    bool private _isSwapLocked = false;

    modifier lockSwap {
        _isSwapLocked = true;
        _;
        _isSwapLocked = false;
    }

    constructor(address treasuryWallet_, address ecosystemWallet_) payable ERC20("Speecher Inu", "SPEECHER") {
        require(address(this).balance > 0, "Token: contract currency balance must be above 0");

        // DEX router
        if (block.chainid == 56) {
            dexRouter = IDexRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IDexRouter(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else {
            revert();
        }

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

        // Mint total supply - called once here only
        _mint(address(this), 100_000_000 * 1e18);

        // Wallets
        treasuryWallet = treasuryWallet_;
        ecosystemWallet = ecosystemWallet_;
    }

    function speak(uint256 botBlocks_, uint256 botSeconds_, uint256 maxTxAmount_, uint256 maxWalletAmount_, address[] memory botAddresses_) external onlyOwner {
        require(!_tradingEnabled, "Token: trading already enabled");
        require(botBlocks_ >= 0 && botBlocks_ <= 3, "Token: bot blocks must range between 0 and 3");
        require(botSeconds_ >= 10 && botSeconds_ <= 120, "Token: bot seconds must range between 10 and 120");
        require(botAddresses_.length > 0 && botAddresses_.length <= 200, "Token: number of bot addresses cannot be above 200");

        // DEX pair
        dexPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());

        // Exclude from fees
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        // Exclude from max TX
        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);
        excludeFromMaxTx(address(0xdead), true);
        excludeFromMaxTx(address(dexRouter), true);
        excludeFromMaxTx(dexPair, true);

        // Add liquidity
        dexRouter.addLiquidityETH{value: address(this).balance}(address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp);
        IERC20(dexPair).approve(address(dexRouter), type(uint256).max);

        // Anti-bot
        setBots(botAddresses_, true);

        // Trade settings
        setMaxTxAmount(maxTxAmount_);
        setMaxWalletAmount(maxWalletAmount_);
        setSwapTokensAmount(((totalSupply() * 5) / 10000) / 1e18); // 0.05%

        // Launch settings
        _launchTime = block.timestamp;
        _launchBlock = block.number;
        _botBlocks = botBlocks_;
        _botSeconds = botSeconds_;

        swapEnabled = true;
        limitsEnabled = true;
        _tradingEnabled = true;
    }

    function setTreasuryWallet(address treasuryWallet_) public onlyOwner {
        require(treasuryWallet_ != address(0), "Token: treasury wallet address invalid");

        if (isExcludedFromFees(treasuryWallet)) {
            excludeFromFees(treasuryWallet, false);
        }

        if (isExcludedFromMaxTx(treasuryWallet)) {
            excludeFromMaxTx(treasuryWallet, false);
        }

        treasuryWallet = treasuryWallet_;

        excludeFromFees(treasuryWallet_, true);
        excludeFromMaxTx(treasuryWallet_, true);
    }

    function setEcosystemWallet(address ecosystemWallet_) public onlyOwner {
        require(ecosystemWallet_ != address(0), "Token: ecosystem wallet address invalid");

        if (isExcludedFromFees(ecosystemWallet)) {
            excludeFromFees(ecosystemWallet, false);
        }

        if (isExcludedFromMaxTx(ecosystemWallet)) {
            excludeFromMaxTx(ecosystemWallet, false);
        }

        ecosystemWallet = ecosystemWallet_;

        excludeFromFees(ecosystemWallet_, true);
        excludeFromMaxTx(ecosystemWallet_, true);
    }

    function disableLimits() external onlyOwner {
		require(limitsEnabled, "Token: limits already disabled");

        limitsEnabled = false;
    }

    function disableTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Token: transfer delay already disabled");

        transferDelayEnabled = false;
    }

    function setMaxTxAmount(uint256 maxTxAmount_) public onlyOwner {
        require(maxTxAmount_ >= (((totalSupply() * 75) / 10000) / 1e18), "Token: max TX amount cannot be below 0.75%");

        _maxTxAmount = maxTxAmount_ * 1e18;
    }

    function setMaxWalletAmount(uint256 maxWalletAmount_) public onlyOwner {
        require(maxWalletAmount_ >= ((totalSupply() / 100) / 1e18), "Token: max wallet amount cannot be below 1%");

        _maxWalletAmount = maxWalletAmount_ * 1e18;
    }

    function setSwapTokensAmount(uint256 swapTokensAmount_) public {
        require(_msgSender() == owner() || _msgSender() == ecosystemWallet, "Token: caller is not authorised");
        require(swapTokensAmount_ >= (((totalSupply() * 5) / 100000) / 1e18), "Token: swap tokens amount cannot be below 0.005%");
        require(swapTokensAmount_ <= ((totalSupply() / 1000) / 1e18), "Token: swap tokens amount cannot be above 0.1%");

        swapTokensAmount = swapTokensAmount_ * 1e18;
    }

    function excludeFromFees(address excludeAddress_, bool isExcluded_) public onlyOwner {
        if (isExcluded_) {
            require(excludeAddress_ != address(dexRouter) && excludeAddress_ != dexPair, "Token: excluded from fees address invalid");
        } else {
            require(excludeAddress_ != owner() && excludeAddress_ != address(this) && excludeAddress_ != address(0xdead), "Token: excluded from fees address invalid");
        }

        _isExcludedFromFees[excludeAddress_] = isExcluded_;
    }

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

    function excludeFromMaxTx(address excludeAddress_, bool isExcluded_) public onlyOwner {
        if (!isExcluded_) {
            require(excludeAddress_ != owner() && excludeAddress_ != address(this) && excludeAddress_ != address(0xdead) && excludeAddress_ != address(dexRouter) && excludeAddress_ != dexPair, "Token: excluded from max TX address invalid");
        }

        _isExcludedFromMaxTx[excludeAddress_] = isExcluded_;
    }

    function isExcludedFromMaxTx(address excludeAddress_) public view returns (bool) {
        return _isExcludedFromMaxTx[excludeAddress_];
    }

    function setAntiBotEnabled(bool antiBotEnabled_) external {
        require(_msgSender() == owner() || _msgSender() == ecosystemWallet, "Token: caller is not authorised");

        antiBotEnabled = antiBotEnabled_;
    }

    function setBots(address[] memory botAddresses_, bool isBlacklisting_) public {
        require(_msgSender() == owner() || _msgSender() == ecosystemWallet, "Token: caller is not authorised");
        require(botAddresses_.length > 0 && botAddresses_.length <= 200, "Token: number of bot addresses cannot be above 200");

        if (isBlacklisting_ && _tradingEnabled) {
            require(block.timestamp <= (_launchTime + (10 minutes)), "Token: bots can only be blacklisted within the first 10 minutes from launch");
        }

        for (uint256 i = 0; i < botAddresses_.length; i++) {
            if (isBlacklisting_ && (botAddresses_[i] == owner() || botAddresses_[i] == address(this) || botAddresses_[i] == address(0xdead) || botAddresses_[i] == dexPair || botAddresses_[i] == address(dexRouter))) continue;

            if (_bots[botAddresses_[i]] == isBlacklisting_) continue;

            _bots[botAddresses_[i]] = isBlacklisting_;

            if (isBlacklisting_) {
                totalBots++;
            } else {
                totalBots--;
            }
        }
    }

    function isBot(address botAddress_) public view returns (bool) {
        return _bots[botAddress_];
    }

    function forceSwap(uint256 tokensAmount_) external {
        require(_msgSender() == owner() || _msgSender() == ecosystemWallet, "Token: caller is not authorised");

        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Token: contract token balance must be above zero");
        require(tokensAmount_ <= contractTokenBalance, "Token: swap amount exceeds contract balance");

        _swapLiquify(tokensAmount_);
    }

    function withdrawCurrency() external onlyOwner {
        uint256 currencyBalance = address(this).balance;

        require(currencyBalance > 0, "Token: contract currency balance must be above 0");

        (bool success, ) = _msgSender().call{value: currencyBalance}("");
    }

    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, "Token: transfer amount must be greater than zero");

        // Anti-bot
        if (antiBotEnabled) {
            require(!_bots[to] && !_bots[from], "Token: address blacklisted");
        }

        // Trading enabled
        if (!_tradingEnabled) {
            require(isExcludedFromFees(from) || isExcludedFromFees(to), "Token: trading not yet enabled");
        }

        if (limitsEnabled && !_isSwapLocked && from != owner() && to != owner() && to != address(0) && to != address(0xdead)) {
            // Blacklist bots by timestamp & block
            if ((block.timestamp <= (_launchTime + _botSeconds) || block.number <= (_launchBlock + _botBlocks)) && to != address(this) && to != dexPair && to != address(dexRouter)) {
                _bots[to] = true;

                totalBots++;
            }

            // Prevent multiple transfers in specified blocks
            if (transferDelayEnabled && from != address(this) && to != dexPair && to != address(dexRouter)) {
                require(_lastTransferBlock[tx.origin] < (block.number - _transferDelayBlocks) && _lastTransferBlock[to] < (block.number - _transferDelayBlocks), "Token: transfer delay enabled");

                _lastTransferBlock[tx.origin] = block.number;
                _lastTransferBlock[to] = block.number;
            }

            // Max TX and max wallet
            if (from == dexPair && !isExcludedFromMaxTx(to)) {
                // Buy
                require(amount <= _maxTxAmount, "Token: buy amount exceeds max TX limit");
                require(amount + balanceOf(to) <= _maxWalletAmount, "Token: amount would exceed max wallet limit");
            } else if (to == dexPair && !isExcludedFromMaxTx(from)) {
                // Sell
                require(amount <= _maxTxAmount, "Token: sell amount exceeds max TX limit");
            } else if (!isExcludedFromMaxTx(to)) {
                // Transfer
                require(amount + balanceOf(to) <= _maxWalletAmount, "Token: amount would exceed max wallet limit");
            }
        }

        // Swap contract tokens, add liquidity, then distribute
        if (swapEnabled && !_isSwapLocked && balanceOf(address(this)) > swapTokensAmount && from != dexPair && !isExcludedFromFees(from) && !isExcludedFromFees(to)) {
            _swapLiquify(swapTokensAmount);
        }

        bool deductFees = !_isSwapLocked;

        // Omit fees for excluded addresses
        if (isExcludedFromFees(from) || isExcludedFromFees(to) || to == address(dexRouter)) {
            deductFees = false;
        }
 
        uint256 totalAmount = amount;
        uint256 totalFees = 0;

        // Take fees on buys/sells, not wallet transfers
        if (deductFees) {
            if (to == dexPair && sellTotalFees > 0) {
                // Sell
                totalFees = (totalAmount * sellTotalFees) / 100;
                _tokensForTreasury += (totalFees * sellTreasuryFee) / sellTotalFees;
                _tokensForLiquidity += (totalFees * sellLiquidityFee) / sellTotalFees;
                _tokensForEcosystem += (totalFees * sellEcosystemFee) / sellTotalFees;
            } else if (from == dexPair && buyTotalFees > 0) {
                // Buy
                totalFees = (totalAmount * buyTotalFees) / 100;
                _tokensForTreasury += (totalFees * buyTreasuryFee) / buyTotalFees;
                _tokensForLiquidity += (totalFees * buyLiquidityFee) / buyTotalFees;
                _tokensForEcosystem += (totalFees * buyEcosystemFee) / buyTotalFees;
            }
 
            if (totalFees > 0) {
                super._transfer(from, address(this), totalFees);

                totalAmount -= totalFees;
            }
        }

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

    function _swapLiquify(uint256 tokensAmount) private lockSwap {
        uint256 totalTokens = _tokensForTreasury + _tokensForLiquidity + _tokensForEcosystem;

        if (totalTokens == 0) return;

        uint256 halfLiquidityTokens = ((tokensAmount * _tokensForLiquidity) / totalTokens) / 2;

        _swapTokensForCurrency(tokensAmount - halfLiquidityTokens);
 
        uint256 currencyBalance = address(this).balance;

        uint256 currencyForTreasury = (currencyBalance * _tokensForTreasury) / totalTokens;
        uint256 currencyForLiquidity = (currencyBalance * _tokensForLiquidity) / totalTokens;

        bool sendSuccess;

        (sendSuccess, ) = address(treasuryWallet).call{value: currencyForTreasury}("");

        if (halfLiquidityTokens > 0 && currencyForLiquidity > 0) {
            _addLiquidity(halfLiquidityTokens, currencyForLiquidity);
        }

        (sendSuccess, ) = address(ecosystemWallet).call{value: address(this).balance}("");

        _tokensForTreasury = 0;
        _tokensForLiquidity = 0;
        _tokensForEcosystem = 0;
    }

    function _swapTokensForCurrency(uint256 tokensAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
 
        _approve(address(this), address(dexRouter), tokensAmount);
 
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokensAmount, 0, path, address(this), block.timestamp);
    }

    function _addLiquidity(uint256 tokensAmount, uint256 currencyAmount) private {
        _approve(address(this), address(dexRouter), tokensAmount);

        dexRouter.addLiquidityETH{value: currencyAmount}(address(this), tokensAmount, 0, 0, address(0xdead), block.timestamp);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"treasuryWallet_","type":"address"},{"internalType":"address","name":"ecosystemWallet_","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyEcosystemFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludeAddress_","type":"address"},{"internalType":"bool","name":"isExcluded_","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludeAddress_","type":"address"},{"internalType":"bool","name":"isExcluded_","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokensAmount_","type":"uint256"}],"name":"forceSwap","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":"botAddress_","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludeAddress_","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludeAddress_","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellEcosystemFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"antiBotEnabled_","type":"bool"}],"name":"setAntiBotEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"botAddresses_","type":"address[]"},{"internalType":"bool","name":"isBlacklisting_","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ecosystemWallet_","type":"address"}],"name":"setEcosystemWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount_","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAmount_","type":"uint256"}],"name":"setSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWallet_","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks_","type":"uint256"},{"internalType":"uint256","name":"botSeconds_","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"},{"internalType":"uint256","name":"maxWalletAmount_","type":"uint256"},{"internalType":"address[]","name":"botAddresses_","type":"address[]"}],"name":"speak","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805463ffffffff60a01b1916600160b81b1790556002600a556003600f81905560016010819055600460118190559162000041919062000695565b6200004d919062000695565b60125560036013556001601455600460155560155460145460135462000074919062000695565b62000080919062000695565b6016556000601781905560188190556019819055601c8054600160ff199182168117909255601e839055601f839055602091909155600a60215560229190915560238054909116905560405162003fe738819003908190833981016040819052620000eb9162000548565b604080518082018252600c81526b537065656368657220496e7560a01b60208083019182528351808501909452600884526729a822a2a1a422a960c11b9084015281519192916200013f9160039162000485565b5080516200015590600490602084019062000485565b505050620001726200016c620002b660201b60201c565b620002ba565b600047116200019e5760405162461bcd60e51b81526004016200019590620005c1565b60405180910390fd5b4660381415620001d457600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000251565b46606114156200020a57600680546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000251565b46600114806200021a5750466004145b156200024c57600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000251565b600080fd5b6006546200026d9030906001600160a01b03166000196200030c565b62000284306a52b7d2dcc80cd2e4000000620003c8565b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055620006f7565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620003355760405162461bcd60e51b8152600401620001959062000611565b6001600160a01b0382166200035e5760405162461bcd60e51b815260040162000195906200057f565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620003bb9085906200068c565b60405180910390a3505050565b6001600160a01b038216620003f15760405162461bcd60e51b8152600401620001959062000655565b806002600082825462000405919062000695565b90915550506001600160a01b038216600090815260208190526040812080548392906200043490849062000695565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620004799085906200068c565b60405180910390a35050565b8280546200049390620006ba565b90600052602060002090601f016020900481019282620004b7576000855562000502565b82601f10620004d257805160ff191683800117855562000502565b8280016001018555821562000502579182015b8281111562000502578251825591602001919060010190620004e5565b506200051092915062000514565b5090565b5b8082111562000510576000815560010162000515565b80516001600160a01b03811681146200054357600080fd5b919050565b600080604083850312156200055b578182fd5b62000566836200052b565b915062000576602084016200052b565b90509250929050565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526030908201527f546f6b656e3a20636f6e74726163742063757272656e63792062616c616e636560408201526f0206d7573742062652061626f766520360841b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b60008219821115620006b557634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680620006cf57607f821691505b60208210811415620006f157634e487b7160e01b600052602260045260246000fd5b50919050565b6138e080620007076000396000f3fe6080604052600436106102975760003560e01c8063715018a61161015a578063d4c989d3116100c1578063ec28438a1161007a578063ec28438a14610732578063f11a24d314610752578063f242ab4114610767578063f3ff43da1461077c578063f63743421461079c578063f928364c146107b15761029e565b8063d4c989d314610693578063d85ba063146106b3578063d8c6404b146106c8578063dd62ed3e146106dd578063e884f260146106fd578063ea65bad9146107125761029e565b8063a8602fea11610113578063a8602fea146105e9578063a9059cbb14610609578063b313513114610629578063c02466681461063e578063c876d0b91461065e578063c87d6a62146106735761029e565b8063715018a61461055557806380c542941461056a5780638da5cb5b1461057f57806395d89b41146105945780639c0db5f3146105a9578063a457c2d7146105c95761029e565b806343e716fe116101fe578063658c27a9116101b7578063658c27a9146104c157806365b99f63146104e15780636a486a8e146104f65780636b2fb1241461050b5780636ddd17131461052057806370a08231146105355761029e565b806343e716fe1461042d5780634626402b1461044d5780634fbee1931461046257806356b4bb6e146104825780635c068a8c146104975780635f1c3182146104ac5761029e565b806327a14fc21161025057806327a14fc214610381578063313ce567146103a15780633582ad23146103c357806339509351146103d85780633bbac579146103f8578063435263ef146104185761029e565b806306fdde03146102a35780630758d924146102ce578063095ea7b3146102f057806318160ddd1461031d57806321cd0c401461033f57806323b872dd146103615761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b86107c6565b6040516102c59190612d4b565b60405180910390f35b3480156102da57600080fd5b506102e3610858565b6040516102c59190612cbe565b3480156102fc57600080fd5b5061031061030b366004612b6c565b610867565b6040516102c59190612d40565b34801561032957600080fd5b50610332610889565b6040516102c591906136f9565b34801561034b57600080fd5b5061035f61035a366004612bdc565b61088f565b005b34801561036d57600080fd5b5061031061037c366004612aff565b61090f565b34801561038d57600080fd5b5061035f61039c366004612c14565b61093d565b3480156103ad57600080fd5b506103b66109da565b6040516102c59190613772565b3480156103cf57600080fd5b506103106109df565b3480156103e457600080fd5b506103106103f3366004612b6c565b6109ef565b34801561040457600080fd5b50610310610413366004612a88565b610a1b565b34801561042457600080fd5b506102e3610a3d565b34801561043957600080fd5b5061035f610448366004612c14565b610a4c565b34801561045957600080fd5b506102e3610b62565b34801561046e57600080fd5b5061031061047d366004612a88565b610b71565b34801561048e57600080fd5b50610332610b8f565b3480156104a357600080fd5b50610332610b95565b3480156104b857600080fd5b50610332610b9b565b3480156104cd57600080fd5b506103106104dc366004612a88565b610ba1565b3480156104ed57600080fd5b5061035f610bbf565b34801561050257600080fd5b50610332610c85565b34801561051757600080fd5b50610332610c8b565b34801561052c57600080fd5b50610310610c91565b34801561054157600080fd5b50610332610550366004612a88565b610ca1565b34801561056157600080fd5b5061035f610cbc565b34801561057657600080fd5b50610332610d07565b34801561058b57600080fd5b506102e3610d0d565b3480156105a057600080fd5b506102b8610d1c565b3480156105b557600080fd5b5061035f6105c4366004612b97565b610d2b565b3480156105d557600080fd5b506103106105e4366004612b6c565b611090565b3480156105f557600080fd5b5061035f610604366004612a88565b6110d8565b34801561061557600080fd5b50610310610624366004612b6c565b6111d3565b34801561063557600080fd5b506103326111eb565b34801561064a57600080fd5b5061035f610659366004612b3f565b6111f1565b34801561066a57600080fd5b50610310611313565b34801561067f57600080fd5b5061035f61068e366004612c59565b611323565b34801561069f57600080fd5b5061035f6106ae366004612b3f565b6117f9565b3480156106bf57600080fd5b50610332611901565b3480156106d457600080fd5b50610310611907565b3480156106e957600080fd5b506103326106f8366004612ac7565b611910565b34801561070957600080fd5b5061035f61193b565b34801561071e57600080fd5b5061035f61072d366004612c14565b6119b2565b34801561073e57600080fd5b5061035f61074d366004612c14565b611a70565b34801561075e57600080fd5b50610332611b19565b34801561077357600080fd5b506102e3611b1f565b34801561078857600080fd5b5061035f610797366004612a88565b611b2e565b3480156107a857600080fd5b50610332611c1b565b3480156107bd57600080fd5b5061035f611c21565b6060600380546107d590613805565b80601f016020809104026020016040519081016040528092919081815260200182805461080190613805565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b5050505050905090565b6006546001600160a01b031681565b600080610872611c98565b905061087f818585611c9c565b5060019392505050565b60025490565b610897610d0d565b6001600160a01b03166108a8611c98565b6001600160a01b031614806108d757506009546001600160a01b03166108cc611c98565b6001600160a01b0316145b6108fc5760405162461bcd60e51b81526004016108f3906130ac565b60405180910390fd5b601c805460ff1916911515919091179055565b60008061091a611c98565b9050610927858285611d50565b610932858585611d9a565b506001949350505050565b610945611c98565b6001600160a01b0316610956610d0d565b6001600160a01b03161461097c5760405162461bcd60e51b81526004016108f390613205565b670de0b6b3a7640000606461098f610889565b6109999190613798565b6109a39190613798565b8110156109c25760405162461bcd60e51b81526004016108f390613061565b6109d481670de0b6b3a76400006137b8565b600d5550565b601290565b600954600160a81b900460ff1681565b6000806109fa611c98565b905061087f818585610a0c8589611910565b610a169190613780565b611c9c565b6001600160a01b0381166000908152601d602052604090205460ff165b919050565b6009546001600160a01b031681565b610a54610d0d565b6001600160a01b0316610a65611c98565b6001600160a01b03161480610a9457506009546001600160a01b0316610a89611c98565b6001600160a01b0316145b610ab05760405162461bcd60e51b81526004016108f3906130ac565b670de0b6b3a7640000620186a0610ac5610889565b610ad09060056137b8565b610ada9190613798565b610ae49190613798565b811015610b035760405162461bcd60e51b81526004016108f39061337e565b670de0b6b3a76400006103e8610b17610889565b610b219190613798565b610b2b9190613798565b811115610b4a5760405162461bcd60e51b81526004016108f390613449565b610b5c81670de0b6b3a76400006137b8565b600e5550565b6008546001600160a01b031681565b6001600160a01b03166000908152601a602052604090205460ff1690565b60225481565b600f5481565b600e5481565b6001600160a01b03166000908152601b602052604090205460ff1690565b610bc7611c98565b6001600160a01b0316610bd8610d0d565b6001600160a01b031614610bfe5760405162461bcd60e51b81526004016108f390613205565b4780610c1c5760405162461bcd60e51b81526004016108f3906131b5565b6000610c26611c98565b6001600160a01b031682604051610c3c90612cbb565b60006040518083038185875af1925050503d8060008114610c79576040519150601f19603f3d011682016040523d82523d6000602084013e610c7e565b606091505b5050505050565b60165481565b60135481565b600954600160a01b900460ff1681565b6001600160a01b031660009081526020819052604090205490565b610cc4611c98565b6001600160a01b0316610cd5610d0d565b6001600160a01b031614610cfb5760405162461bcd60e51b81526004016108f390613205565b610d056000612495565b565b60155481565b6005546001600160a01b031690565b6060600480546107d590613805565b610d33610d0d565b6001600160a01b0316610d44611c98565b6001600160a01b03161480610d7357506009546001600160a01b0316610d68611c98565b6001600160a01b0316145b610d8f5760405162461bcd60e51b81526004016108f3906130ac565b60008251118015610da2575060c8825111155b610dbe5760405162461bcd60e51b81526004016108f390613519565b808015610dd45750600954600160b01b900460ff165b15610e0757601e54610de890610258613780565b421115610e075760405162461bcd60e51b81526004016108f390613688565b60005b825181101561108b57818015610f7a5750610e23610d0d565b6001600160a01b0316838281518110610e4c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161480610ea15750306001600160a01b0316838281518110610e8e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610ee6575061dead6001600160a01b0316838281518110610ed357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610f30575060075483516001600160a01b0390911690849083908110610f1d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610f7a575060065483516001600160a01b0390911690849083908110610f6757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b15610f8457611079565b811515601d6000858481518110610fab57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615151415610fdf57611079565b81601d600085848151811061100457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508115611063576022805490600061105983613840565b9190505550611079565b60228054906000611073836137ee565b91905055505b8061108381613840565b915050610e0a565b505050565b60008061109b611c98565b905060006110a98286611910565b9050838110156110cb5760405162461bcd60e51b81526004016108f390613643565b6109328286868403611c9c565b6110e0611c98565b6001600160a01b03166110f1610d0d565b6001600160a01b0316146111175760405162461bcd60e51b81526004016108f390613205565b6001600160a01b03811661113d5760405162461bcd60e51b81526004016108f390612fcb565b600854611152906001600160a01b0316610b71565b1561116e5760085461116e906001600160a01b031660006111f1565b600854611183906001600160a01b0316610ba1565b1561119f5760085461119f906001600160a01b031660006117f9565b600880546001600160a01b0319166001600160a01b0383161790556111c58160016111f1565b6111d08160016117f9565b50565b6000806111de611c98565b905061087f818585611d9a565b60115481565b6111f9611c98565b6001600160a01b031661120a610d0d565b6001600160a01b0316146112305760405162461bcd60e51b81526004016108f390613205565b8015611283576006546001600160a01b0383811691161480159061126257506007546001600160a01b03838116911614155b61127e5760405162461bcd60e51b81526004016108f390612e69565b6112e8565b61128b610d0d565b6001600160a01b0316826001600160a01b0316141580156112b557506001600160a01b0382163014155b80156112cc57506001600160a01b03821661dead14155b6112e85760405162461bcd60e51b81526004016108f390612e69565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600954600160b81b900460ff1681565b61132b611c98565b6001600160a01b031661133c610d0d565b6001600160a01b0316146113625760405162461bcd60e51b81526004016108f390613205565b600954600160b01b900460ff161561138c5760405162461bcd60e51b81526004016108f390613302565b60038511156113ad5760405162461bcd60e51b81526004016108f390612f7f565b600a84101580156113bf575060788411155b6113db5760405162461bcd60e51b81526004016108f390613165565b600081511180156113ee575060c8815111155b61140a5760405162461bcd60e51b81526004016108f390613519565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114909190612aab565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612aab565b6040518363ffffffff1660e01b8152600401611542929190612cd2565b602060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190612aab565b600780546001600160a01b0319166001600160a01b03929092169190911790556115c66115bf610d0d565b60016111f1565b6115d13060016111f1565b6115de61dead60016111f1565b6115f06115e9610d0d565b60016117f9565b6115fb3060016117f9565b61160861dead60016117f9565b60065461161f906001600160a01b031660016117f9565b600754611636906001600160a01b031660016117f9565b6006546001600160a01b031663f305d719473061165281610ca1565b60008061165d610d0d565b426040518863ffffffff1660e01b815260040161167f96959493929190612d05565b6060604051808303818588803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d19190612c2c565b505060075460065460405163095ea7b360e01b81526001600160a01b03928316935063095ea7b39261170b92169060001990600401612cec565b602060405180830381600087803b15801561172557600080fd5b505af1158015611739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175d9190612bf8565b50611769816001610d2b565b61177283611a70565b61177b8261093d565b6117b1670de0b6b3a7640000612710611792610889565b61179d9060056137b8565b6117a79190613798565b6104489190613798565b505042601e555043601f556020919091556021556009805460ff60b01b1960ff60a81b1960ff60a01b19909216600160a01b1791909116600160a81b1716600160b01b179055565b611801611c98565b6001600160a01b0316611812610d0d565b6001600160a01b0316146118385760405162461bcd60e51b81526004016108f390613205565b806118d657611845610d0d565b6001600160a01b0316826001600160a01b03161415801561186f57506001600160a01b0382163014155b801561188657506001600160a01b03821661dead14155b80156118a057506006546001600160a01b03838116911614155b80156118ba57506007546001600160a01b03838116911614155b6118d65760405162461bcd60e51b81526004016108f3906134ce565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b60125481565b601c5460ff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611943611c98565b6001600160a01b0316611954610d0d565b6001600160a01b03161461197a5760405162461bcd60e51b81526004016108f390613205565b600954600160b81b900460ff166119a35760405162461bcd60e51b81526004016108f390612d9e565b6009805460ff60b81b19169055565b6119ba610d0d565b6001600160a01b03166119cb611c98565b6001600160a01b031614806119fa57506009546001600160a01b03166119ef611c98565b6001600160a01b0316145b611a165760405162461bcd60e51b81526004016108f3906130ac565b6000611a2130610ca1565b905060008111611a435760405162461bcd60e51b81526004016108f390612eb2565b80821115611a635760405162461bcd60e51b81526004016108f3906130e3565b611a6c826124e7565b5050565b611a78611c98565b6001600160a01b0316611a89610d0d565b6001600160a01b031614611aaf5760405162461bcd60e51b81526004016108f390613205565b670de0b6b3a7640000612710611ac3610889565b611ace90604b6137b8565b611ad89190613798565b611ae29190613798565b811015611b015760405162461bcd60e51b81526004016108f390613271565b611b1381670de0b6b3a76400006137b8565b600c5550565b60105481565b6007546001600160a01b031681565b611b36611c98565b6001600160a01b0316611b47610d0d565b6001600160a01b031614611b6d5760405162461bcd60e51b81526004016108f390613205565b6001600160a01b038116611b935760405162461bcd60e51b81526004016108f39061356b565b600954611ba8906001600160a01b0316610b71565b15611bc457600954611bc4906001600160a01b031660006111f1565b600954611bd9906001600160a01b0316610ba1565b15611bf557600954611bf5906001600160a01b031660006117f9565b600980546001600160a01b0319166001600160a01b0383161790556111c58160016111f1565b60145481565b611c29611c98565b6001600160a01b0316611c3a610d0d565b6001600160a01b031614611c605760405162461bcd60e51b81526004016108f390613205565b600954600160a81b900460ff16611c895760405162461bcd60e51b81526004016108f390613412565b6009805460ff60a81b19169055565b3390565b6001600160a01b038316611cc25760405162461bcd60e51b81526004016108f3906133ce565b6001600160a01b038216611ce85760405162461bcd60e51b81526004016108f390612e27565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611d439085906136f9565b60405180910390a3505050565b6000611d5c8484611910565b90506000198114611d945781811015611d875760405162461bcd60e51b81526004016108f390612f02565b611d948484848403611c9c565b50505050565b6001600160a01b038316611dc05760405162461bcd60e51b81526004016108f390613339565b6001600160a01b038216611de65760405162461bcd60e51b81526004016108f390612de4565b60008111611e065760405162461bcd60e51b81526004016108f390613011565b601c5460ff1615611e6f576001600160a01b0382166000908152601d602052604090205460ff16158015611e5357506001600160a01b0383166000908152601d602052604090205460ff16155b611e6f5760405162461bcd60e51b81526004016108f39061323a565b600954600160b01b900460ff16611eb457611e8983610b71565b80611e985750611e9882610b71565b611eb45760405162461bcd60e51b81526004016108f390613497565b600954600160a81b900460ff168015611ed0575060235460ff16155b8015611ef55750611edf610d0d565b6001600160a01b0316836001600160a01b031614155b8015611f1a5750611f04610d0d565b6001600160a01b0316826001600160a01b031614155b8015611f2e57506001600160a01b03821615155b8015611f4557506001600160a01b03821661dead14155b156121f357602154601e54611f5a9190613780565b42111580611f775750602054601f54611f739190613780565b4311155b8015611f8c57506001600160a01b0382163014155b8015611fa657506007546001600160a01b03838116911614155b8015611fc057506006546001600160a01b03838116911614155b15611ffc576001600160a01b0382166000908152601d60205260408120805460ff191660011790556022805491611ff683613840565b91905055505b600954600160b81b900460ff16801561201e57506001600160a01b0383163014155b801561203857506007546001600160a01b03838116911614155b801561205257506006546001600160a01b03838116911614155b156120e557600a5461206490436137d7565b326000908152600b60205260409020541080156120a45750600a5461208990436137d7565b6001600160a01b0383166000908152600b6020526040902054105b6120c05760405162461bcd60e51b81526004016108f39061312e565b326000908152600b602052604080822043908190556001600160a01b03851683529120555b6007546001600160a01b038481169116148015612108575061210682610ba1565b155b1561216857600c5481111561212f5760405162461bcd60e51b81526004016108f3906135b2565b600d5461213b83610ca1565b6121459083613780565b11156121635760405162461bcd60e51b81526004016108f3906135f8565b6121f3565b6007546001600160a01b03838116911614801561218b575061218983610ba1565b155b156121b257600c548111156121635760405162461bcd60e51b81526004016108f3906132bb565b6121bb82610ba1565b6121f357600d546121cb83610ca1565b6121d59083613780565b11156121f35760405162461bcd60e51b81526004016108f3906135f8565b600954600160a01b900460ff16801561220f575060235460ff16155b80156122245750600e5461222230610ca1565b115b801561223e57506007546001600160a01b03848116911614155b8015612250575061224e83610b71565b155b8015612262575061226082610b71565b155b1561227257612272600e546124e7565b60235460ff161561228284610b71565b80612291575061229183610b71565b806122a957506006546001600160a01b038481169116145b156122b2575060005b8160008215612482576007546001600160a01b0386811691161480156122da57506000601654115b15612392576064601654836122ef91906137b8565b6122f99190613798565b90506016546013548261230c91906137b8565b6123169190613798565b601760008282546123279190613780565b909155505060165460145461233c90836137b8565b6123469190613798565b601860008282546123579190613780565b909155505060165460155461236c90836137b8565b6123769190613798565b601960008282546123879190613780565b909155506124649050565b6007546001600160a01b0387811691161480156123b157506000601254115b15612464576064601254836123c691906137b8565b6123d09190613798565b9050601254600f54826123e391906137b8565b6123ed9190613798565b601760008282546123fe9190613780565b909155505060125460105461241390836137b8565b61241d9190613798565b6018600082825461242e9190613780565b909155505060125460115461244390836137b8565b61244d9190613798565b6019600082825461245e9190613780565b90915550505b8015612482576124758630836126a4565b61247f81836137d7565b91505b61248d8686846126a4565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6023805460ff191660011790556019546018546017546000929161250a91613780565b6125149190613780565b9050806125215750612697565b60006002826018548561253491906137b8565b61253e9190613798565b6125489190613798565b905061255c61255782856137d7565b6127b8565b6017544790600090849061257090846137b8565b61257a9190613798565b90506000846018548461258d91906137b8565b6125979190613798565b6008546040519192506000916001600160a01b039091169084906125ba90612cbb565b60006040518083038185875af1925050503d80600081146125f7576040519150601f19603f3d011682016040523d82523d6000602084013e6125fc565b606091505b509091505084158015906126105750600082115b1561261f5761261f8583612935565b6009546040516001600160a01b0390911690479061263c90612cbb565b60006040518083038185875af1925050503d8060008114612679576040519150601f19603f3d011682016040523d82523d6000602084013e61267e565b606091505b5050600060178190556018819055601955505050505050505b506023805460ff19169055565b6001600160a01b0383166126ca5760405162461bcd60e51b81526004016108f390613339565b6001600160a01b0382166126f05760405162461bcd60e51b81526004016108f390612de4565b6001600160a01b038316600090815260208190526040902054818110156127295760405162461bcd60e51b81526004016108f390612f39565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612760908490613780565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127aa91906136f9565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127fb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561284f57600080fd5b505afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128879190612aab565b816001815181106128a857634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526006546128ce9130911684611c9c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612907908590600090869030904290600401613702565b600060405180830381600087803b15801561292157600080fd5b505af115801561248d573d6000803e3d6000fd5b60065461294d9030906001600160a01b031684611c9c565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061298c9030908790600090819061dead904290600401612d05565b6060604051808303818588803b1580156129a557600080fd5b505af11580156129b9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c7e9190612c2c565b8035610a3881613887565b600082601f8301126129f9578081fd5b8135602067ffffffffffffffff80831115612a1657612a16613871565b81830260405183828201018181108482111715612a3557612a35613871565b60405284815283810192508684018288018501891015612a53578687fd5b8692505b85831015612a7c57612a68816129de565b845292840192600192909201918401612a57565b50979650505050505050565b600060208284031215612a99578081fd5b8135612aa481613887565b9392505050565b600060208284031215612abc578081fd5b8151612aa481613887565b60008060408385031215612ad9578081fd5b8235612ae481613887565b91506020830135612af481613887565b809150509250929050565b600080600060608486031215612b13578081fd5b8335612b1e81613887565b92506020840135612b2e81613887565b929592945050506040919091013590565b60008060408385031215612b51578182fd5b8235612b5c81613887565b91506020830135612af48161389c565b60008060408385031215612b7e578182fd5b8235612b8981613887565b946020939093013593505050565b60008060408385031215612ba9578182fd5b823567ffffffffffffffff811115612bbf578283fd5b612bcb858286016129e9565b9250506020830135612af48161389c565b600060208284031215612bed578081fd5b8135612aa48161389c565b600060208284031215612c09578081fd5b8151612aa48161389c565b600060208284031215612c25578081fd5b5035919050565b600080600060608486031215612c40578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612c70578081fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115612ca2578182fd5b612cae888289016129e9565b9150509295509295909350565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612d7757858101830151858201604001528201612d5b565b81811115612d885783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f546f6b656e3a207472616e736665722064656c617920616c72656164792064696040820152651cd8589b195960d21b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526029908201527f546f6b656e3a206578636c756465642066726f6d2066656573206164647265736040820152681cc81a5b9d985b1a5960ba1b606082015260800190565b60208082526030908201527f546f6b656e3a20636f6e747261637420746f6b656e2062616c616e6365206d7560408201526f73742062652061626f7665207a65726f60801b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252602c908201527f546f6b656e3a20626f7420626c6f636b73206d7573742072616e67652062657460408201526b7765656e203020616e64203360a01b606082015260800190565b60208082526026908201527f546f6b656e3a2074726561737572792077616c6c6574206164647265737320696040820152651b9d985b1a5960d21b606082015260800190565b60208082526030908201527f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760408201526f726561746572207468616e207a65726f60801b606082015260800190565b6020808252602b908201527f546f6b656e3a206d61782077616c6c657420616d6f756e742063616e6e6f742060408201526a62652062656c6f7720312560a81b606082015260800190565b6020808252601f908201527f546f6b656e3a2063616c6c6572206973206e6f7420617574686f726973656400604082015260600190565b6020808252602b908201527f546f6b656e3a207377617020616d6f756e74206578636565647320636f6e747260408201526a6163742062616c616e636560a81b606082015260800190565b6020808252601d908201527f546f6b656e3a207472616e736665722064656c617920656e61626c6564000000604082015260600190565b60208082526030908201527f546f6b656e3a20626f74207365636f6e6473206d7573742072616e676520626560408201526f0747765656e20313020616e64203132360841b606082015260800190565b60208082526030908201527f546f6b656e3a20636f6e74726163742063757272656e63792062616c616e636560408201526f0206d7573742062652061626f766520360841b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f546f6b656e3a206164647265737320626c61636b6c6973746564000000000000604082015260600190565b6020808252602a908201527f546f6b656e3a206d617820545820616d6f756e742063616e6e6f742062652062604082015269656c6f7720302e37352560b01b606082015260800190565b60208082526027908201527f546f6b656e3a2073656c6c20616d6f756e742065786365656473206d6178205460408201526616081b1a5b5a5d60ca1b606082015260800190565b6020808252601e908201527f546f6b656e3a2074726164696e6720616c726561647920656e61626c65640000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526030908201527f546f6b656e3a207377617020746f6b656e7320616d6f756e742063616e6e6f7460408201526f2062652062656c6f7720302e3030352560801b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f546f6b656e3a206c696d69747320616c72656164792064697361626c65640000604082015260600190565b6020808252602e908201527f546f6b656e3a207377617020746f6b656e7320616d6f756e742063616e6e6f7460408201526d2062652061626f766520302e312560901b606082015260800190565b6020808252601e908201527f546f6b656e3a2074726164696e67206e6f742079657420656e61626c65640000604082015260600190565b6020808252602b908201527f546f6b656e3a206578636c756465642066726f6d206d6178205458206164647260408201526a195cdcc81a5b9d985b1a5960aa1b606082015260800190565b60208082526032908201527f546f6b656e3a206e756d626572206f6620626f742061646472657373657320636040820152710616e6e6f742062652061626f7665203230360741b606082015260800190565b60208082526027908201527f546f6b656e3a2065636f73797374656d2077616c6c65742061646472657373206040820152661a5b9d985b1a5960ca1b606082015260800190565b60208082526026908201527f546f6b656e3a2062757920616d6f756e742065786365656473206d6178205458604082015265081b1a5b5a5d60d21b606082015260800190565b6020808252602b908201527f546f6b656e3a20616d6f756e7420776f756c6420657863656564206d6178207760408201526a185b1b195d081b1a5b5a5d60aa1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252604b908201527f546f6b656e3a20626f74732063616e206f6e6c7920626520626c61636b6c697360408201527f7465642077697468696e20746865206669727374203130206d696e757465732060608201526a0cce4deda40d8c2eadcc6d60ab1b608082015260a00190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156137515784516001600160a01b03168352938301939183019160010161372c565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156137935761379361385b565b500190565b6000826137b357634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156137d2576137d261385b565b500290565b6000828210156137e9576137e961385b565b500390565b6000816137fd576137fd61385b565b506000190190565b60028104600182168061381957607f821691505b6020821081141561383a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138545761385461385b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111d057600080fd5b80151581146111d057600080fdfea2646970667358221220b1e2a04ab109ddf95c4378c42b15cf1d108ebc5fa4799c053f9237913eb6192964736f6c634300080000330000000000000000000000000182ec9758175f72b70546213321e6111470dc5f000000000000000000000000034e690237b5ce205eca4a4e40a3a2a76587aa2d

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063715018a61161015a578063d4c989d3116100c1578063ec28438a1161007a578063ec28438a14610732578063f11a24d314610752578063f242ab4114610767578063f3ff43da1461077c578063f63743421461079c578063f928364c146107b15761029e565b8063d4c989d314610693578063d85ba063146106b3578063d8c6404b146106c8578063dd62ed3e146106dd578063e884f260146106fd578063ea65bad9146107125761029e565b8063a8602fea11610113578063a8602fea146105e9578063a9059cbb14610609578063b313513114610629578063c02466681461063e578063c876d0b91461065e578063c87d6a62146106735761029e565b8063715018a61461055557806380c542941461056a5780638da5cb5b1461057f57806395d89b41146105945780639c0db5f3146105a9578063a457c2d7146105c95761029e565b806343e716fe116101fe578063658c27a9116101b7578063658c27a9146104c157806365b99f63146104e15780636a486a8e146104f65780636b2fb1241461050b5780636ddd17131461052057806370a08231146105355761029e565b806343e716fe1461042d5780634626402b1461044d5780634fbee1931461046257806356b4bb6e146104825780635c068a8c146104975780635f1c3182146104ac5761029e565b806327a14fc21161025057806327a14fc214610381578063313ce567146103a15780633582ad23146103c357806339509351146103d85780633bbac579146103f8578063435263ef146104185761029e565b806306fdde03146102a35780630758d924146102ce578063095ea7b3146102f057806318160ddd1461031d57806321cd0c401461033f57806323b872dd146103615761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b86107c6565b6040516102c59190612d4b565b60405180910390f35b3480156102da57600080fd5b506102e3610858565b6040516102c59190612cbe565b3480156102fc57600080fd5b5061031061030b366004612b6c565b610867565b6040516102c59190612d40565b34801561032957600080fd5b50610332610889565b6040516102c591906136f9565b34801561034b57600080fd5b5061035f61035a366004612bdc565b61088f565b005b34801561036d57600080fd5b5061031061037c366004612aff565b61090f565b34801561038d57600080fd5b5061035f61039c366004612c14565b61093d565b3480156103ad57600080fd5b506103b66109da565b6040516102c59190613772565b3480156103cf57600080fd5b506103106109df565b3480156103e457600080fd5b506103106103f3366004612b6c565b6109ef565b34801561040457600080fd5b50610310610413366004612a88565b610a1b565b34801561042457600080fd5b506102e3610a3d565b34801561043957600080fd5b5061035f610448366004612c14565b610a4c565b34801561045957600080fd5b506102e3610b62565b34801561046e57600080fd5b5061031061047d366004612a88565b610b71565b34801561048e57600080fd5b50610332610b8f565b3480156104a357600080fd5b50610332610b95565b3480156104b857600080fd5b50610332610b9b565b3480156104cd57600080fd5b506103106104dc366004612a88565b610ba1565b3480156104ed57600080fd5b5061035f610bbf565b34801561050257600080fd5b50610332610c85565b34801561051757600080fd5b50610332610c8b565b34801561052c57600080fd5b50610310610c91565b34801561054157600080fd5b50610332610550366004612a88565b610ca1565b34801561056157600080fd5b5061035f610cbc565b34801561057657600080fd5b50610332610d07565b34801561058b57600080fd5b506102e3610d0d565b3480156105a057600080fd5b506102b8610d1c565b3480156105b557600080fd5b5061035f6105c4366004612b97565b610d2b565b3480156105d557600080fd5b506103106105e4366004612b6c565b611090565b3480156105f557600080fd5b5061035f610604366004612a88565b6110d8565b34801561061557600080fd5b50610310610624366004612b6c565b6111d3565b34801561063557600080fd5b506103326111eb565b34801561064a57600080fd5b5061035f610659366004612b3f565b6111f1565b34801561066a57600080fd5b50610310611313565b34801561067f57600080fd5b5061035f61068e366004612c59565b611323565b34801561069f57600080fd5b5061035f6106ae366004612b3f565b6117f9565b3480156106bf57600080fd5b50610332611901565b3480156106d457600080fd5b50610310611907565b3480156106e957600080fd5b506103326106f8366004612ac7565b611910565b34801561070957600080fd5b5061035f61193b565b34801561071e57600080fd5b5061035f61072d366004612c14565b6119b2565b34801561073e57600080fd5b5061035f61074d366004612c14565b611a70565b34801561075e57600080fd5b50610332611b19565b34801561077357600080fd5b506102e3611b1f565b34801561078857600080fd5b5061035f610797366004612a88565b611b2e565b3480156107a857600080fd5b50610332611c1b565b3480156107bd57600080fd5b5061035f611c21565b6060600380546107d590613805565b80601f016020809104026020016040519081016040528092919081815260200182805461080190613805565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b5050505050905090565b6006546001600160a01b031681565b600080610872611c98565b905061087f818585611c9c565b5060019392505050565b60025490565b610897610d0d565b6001600160a01b03166108a8611c98565b6001600160a01b031614806108d757506009546001600160a01b03166108cc611c98565b6001600160a01b0316145b6108fc5760405162461bcd60e51b81526004016108f3906130ac565b60405180910390fd5b601c805460ff1916911515919091179055565b60008061091a611c98565b9050610927858285611d50565b610932858585611d9a565b506001949350505050565b610945611c98565b6001600160a01b0316610956610d0d565b6001600160a01b03161461097c5760405162461bcd60e51b81526004016108f390613205565b670de0b6b3a7640000606461098f610889565b6109999190613798565b6109a39190613798565b8110156109c25760405162461bcd60e51b81526004016108f390613061565b6109d481670de0b6b3a76400006137b8565b600d5550565b601290565b600954600160a81b900460ff1681565b6000806109fa611c98565b905061087f818585610a0c8589611910565b610a169190613780565b611c9c565b6001600160a01b0381166000908152601d602052604090205460ff165b919050565b6009546001600160a01b031681565b610a54610d0d565b6001600160a01b0316610a65611c98565b6001600160a01b03161480610a9457506009546001600160a01b0316610a89611c98565b6001600160a01b0316145b610ab05760405162461bcd60e51b81526004016108f3906130ac565b670de0b6b3a7640000620186a0610ac5610889565b610ad09060056137b8565b610ada9190613798565b610ae49190613798565b811015610b035760405162461bcd60e51b81526004016108f39061337e565b670de0b6b3a76400006103e8610b17610889565b610b219190613798565b610b2b9190613798565b811115610b4a5760405162461bcd60e51b81526004016108f390613449565b610b5c81670de0b6b3a76400006137b8565b600e5550565b6008546001600160a01b031681565b6001600160a01b03166000908152601a602052604090205460ff1690565b60225481565b600f5481565b600e5481565b6001600160a01b03166000908152601b602052604090205460ff1690565b610bc7611c98565b6001600160a01b0316610bd8610d0d565b6001600160a01b031614610bfe5760405162461bcd60e51b81526004016108f390613205565b4780610c1c5760405162461bcd60e51b81526004016108f3906131b5565b6000610c26611c98565b6001600160a01b031682604051610c3c90612cbb565b60006040518083038185875af1925050503d8060008114610c79576040519150601f19603f3d011682016040523d82523d6000602084013e610c7e565b606091505b5050505050565b60165481565b60135481565b600954600160a01b900460ff1681565b6001600160a01b031660009081526020819052604090205490565b610cc4611c98565b6001600160a01b0316610cd5610d0d565b6001600160a01b031614610cfb5760405162461bcd60e51b81526004016108f390613205565b610d056000612495565b565b60155481565b6005546001600160a01b031690565b6060600480546107d590613805565b610d33610d0d565b6001600160a01b0316610d44611c98565b6001600160a01b03161480610d7357506009546001600160a01b0316610d68611c98565b6001600160a01b0316145b610d8f5760405162461bcd60e51b81526004016108f3906130ac565b60008251118015610da2575060c8825111155b610dbe5760405162461bcd60e51b81526004016108f390613519565b808015610dd45750600954600160b01b900460ff165b15610e0757601e54610de890610258613780565b421115610e075760405162461bcd60e51b81526004016108f390613688565b60005b825181101561108b57818015610f7a5750610e23610d0d565b6001600160a01b0316838281518110610e4c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161480610ea15750306001600160a01b0316838281518110610e8e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610ee6575061dead6001600160a01b0316838281518110610ed357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610f30575060075483516001600160a01b0390911690849083908110610f1d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b80610f7a575060065483516001600160a01b0390911690849083908110610f6757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b15610f8457611079565b811515601d6000858481518110610fab57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615151415610fdf57611079565b81601d600085848151811061100457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508115611063576022805490600061105983613840565b9190505550611079565b60228054906000611073836137ee565b91905055505b8061108381613840565b915050610e0a565b505050565b60008061109b611c98565b905060006110a98286611910565b9050838110156110cb5760405162461bcd60e51b81526004016108f390613643565b6109328286868403611c9c565b6110e0611c98565b6001600160a01b03166110f1610d0d565b6001600160a01b0316146111175760405162461bcd60e51b81526004016108f390613205565b6001600160a01b03811661113d5760405162461bcd60e51b81526004016108f390612fcb565b600854611152906001600160a01b0316610b71565b1561116e5760085461116e906001600160a01b031660006111f1565b600854611183906001600160a01b0316610ba1565b1561119f5760085461119f906001600160a01b031660006117f9565b600880546001600160a01b0319166001600160a01b0383161790556111c58160016111f1565b6111d08160016117f9565b50565b6000806111de611c98565b905061087f818585611d9a565b60115481565b6111f9611c98565b6001600160a01b031661120a610d0d565b6001600160a01b0316146112305760405162461bcd60e51b81526004016108f390613205565b8015611283576006546001600160a01b0383811691161480159061126257506007546001600160a01b03838116911614155b61127e5760405162461bcd60e51b81526004016108f390612e69565b6112e8565b61128b610d0d565b6001600160a01b0316826001600160a01b0316141580156112b557506001600160a01b0382163014155b80156112cc57506001600160a01b03821661dead14155b6112e85760405162461bcd60e51b81526004016108f390612e69565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600954600160b81b900460ff1681565b61132b611c98565b6001600160a01b031661133c610d0d565b6001600160a01b0316146113625760405162461bcd60e51b81526004016108f390613205565b600954600160b01b900460ff161561138c5760405162461bcd60e51b81526004016108f390613302565b60038511156113ad5760405162461bcd60e51b81526004016108f390612f7f565b600a84101580156113bf575060788411155b6113db5760405162461bcd60e51b81526004016108f390613165565b600081511180156113ee575060c8815111155b61140a5760405162461bcd60e51b81526004016108f390613519565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114909190612aab565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ed57600080fd5b505afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612aab565b6040518363ffffffff1660e01b8152600401611542929190612cd2565b602060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190612aab565b600780546001600160a01b0319166001600160a01b03929092169190911790556115c66115bf610d0d565b60016111f1565b6115d13060016111f1565b6115de61dead60016111f1565b6115f06115e9610d0d565b60016117f9565b6115fb3060016117f9565b61160861dead60016117f9565b60065461161f906001600160a01b031660016117f9565b600754611636906001600160a01b031660016117f9565b6006546001600160a01b031663f305d719473061165281610ca1565b60008061165d610d0d565b426040518863ffffffff1660e01b815260040161167f96959493929190612d05565b6060604051808303818588803b15801561169857600080fd5b505af11580156116ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116d19190612c2c565b505060075460065460405163095ea7b360e01b81526001600160a01b03928316935063095ea7b39261170b92169060001990600401612cec565b602060405180830381600087803b15801561172557600080fd5b505af1158015611739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175d9190612bf8565b50611769816001610d2b565b61177283611a70565b61177b8261093d565b6117b1670de0b6b3a7640000612710611792610889565b61179d9060056137b8565b6117a79190613798565b6104489190613798565b505042601e555043601f556020919091556021556009805460ff60b01b1960ff60a81b1960ff60a01b19909216600160a01b1791909116600160a81b1716600160b01b179055565b611801611c98565b6001600160a01b0316611812610d0d565b6001600160a01b0316146118385760405162461bcd60e51b81526004016108f390613205565b806118d657611845610d0d565b6001600160a01b0316826001600160a01b03161415801561186f57506001600160a01b0382163014155b801561188657506001600160a01b03821661dead14155b80156118a057506006546001600160a01b03838116911614155b80156118ba57506007546001600160a01b03838116911614155b6118d65760405162461bcd60e51b81526004016108f3906134ce565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b60125481565b601c5460ff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611943611c98565b6001600160a01b0316611954610d0d565b6001600160a01b03161461197a5760405162461bcd60e51b81526004016108f390613205565b600954600160b81b900460ff166119a35760405162461bcd60e51b81526004016108f390612d9e565b6009805460ff60b81b19169055565b6119ba610d0d565b6001600160a01b03166119cb611c98565b6001600160a01b031614806119fa57506009546001600160a01b03166119ef611c98565b6001600160a01b0316145b611a165760405162461bcd60e51b81526004016108f3906130ac565b6000611a2130610ca1565b905060008111611a435760405162461bcd60e51b81526004016108f390612eb2565b80821115611a635760405162461bcd60e51b81526004016108f3906130e3565b611a6c826124e7565b5050565b611a78611c98565b6001600160a01b0316611a89610d0d565b6001600160a01b031614611aaf5760405162461bcd60e51b81526004016108f390613205565b670de0b6b3a7640000612710611ac3610889565b611ace90604b6137b8565b611ad89190613798565b611ae29190613798565b811015611b015760405162461bcd60e51b81526004016108f390613271565b611b1381670de0b6b3a76400006137b8565b600c5550565b60105481565b6007546001600160a01b031681565b611b36611c98565b6001600160a01b0316611b47610d0d565b6001600160a01b031614611b6d5760405162461bcd60e51b81526004016108f390613205565b6001600160a01b038116611b935760405162461bcd60e51b81526004016108f39061356b565b600954611ba8906001600160a01b0316610b71565b15611bc457600954611bc4906001600160a01b031660006111f1565b600954611bd9906001600160a01b0316610ba1565b15611bf557600954611bf5906001600160a01b031660006117f9565b600980546001600160a01b0319166001600160a01b0383161790556111c58160016111f1565b60145481565b611c29611c98565b6001600160a01b0316611c3a610d0d565b6001600160a01b031614611c605760405162461bcd60e51b81526004016108f390613205565b600954600160a81b900460ff16611c895760405162461bcd60e51b81526004016108f390613412565b6009805460ff60a81b19169055565b3390565b6001600160a01b038316611cc25760405162461bcd60e51b81526004016108f3906133ce565b6001600160a01b038216611ce85760405162461bcd60e51b81526004016108f390612e27565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611d439085906136f9565b60405180910390a3505050565b6000611d5c8484611910565b90506000198114611d945781811015611d875760405162461bcd60e51b81526004016108f390612f02565b611d948484848403611c9c565b50505050565b6001600160a01b038316611dc05760405162461bcd60e51b81526004016108f390613339565b6001600160a01b038216611de65760405162461bcd60e51b81526004016108f390612de4565b60008111611e065760405162461bcd60e51b81526004016108f390613011565b601c5460ff1615611e6f576001600160a01b0382166000908152601d602052604090205460ff16158015611e5357506001600160a01b0383166000908152601d602052604090205460ff16155b611e6f5760405162461bcd60e51b81526004016108f39061323a565b600954600160b01b900460ff16611eb457611e8983610b71565b80611e985750611e9882610b71565b611eb45760405162461bcd60e51b81526004016108f390613497565b600954600160a81b900460ff168015611ed0575060235460ff16155b8015611ef55750611edf610d0d565b6001600160a01b0316836001600160a01b031614155b8015611f1a5750611f04610d0d565b6001600160a01b0316826001600160a01b031614155b8015611f2e57506001600160a01b03821615155b8015611f4557506001600160a01b03821661dead14155b156121f357602154601e54611f5a9190613780565b42111580611f775750602054601f54611f739190613780565b4311155b8015611f8c57506001600160a01b0382163014155b8015611fa657506007546001600160a01b03838116911614155b8015611fc057506006546001600160a01b03838116911614155b15611ffc576001600160a01b0382166000908152601d60205260408120805460ff191660011790556022805491611ff683613840565b91905055505b600954600160b81b900460ff16801561201e57506001600160a01b0383163014155b801561203857506007546001600160a01b03838116911614155b801561205257506006546001600160a01b03838116911614155b156120e557600a5461206490436137d7565b326000908152600b60205260409020541080156120a45750600a5461208990436137d7565b6001600160a01b0383166000908152600b6020526040902054105b6120c05760405162461bcd60e51b81526004016108f39061312e565b326000908152600b602052604080822043908190556001600160a01b03851683529120555b6007546001600160a01b038481169116148015612108575061210682610ba1565b155b1561216857600c5481111561212f5760405162461bcd60e51b81526004016108f3906135b2565b600d5461213b83610ca1565b6121459083613780565b11156121635760405162461bcd60e51b81526004016108f3906135f8565b6121f3565b6007546001600160a01b03838116911614801561218b575061218983610ba1565b155b156121b257600c548111156121635760405162461bcd60e51b81526004016108f3906132bb565b6121bb82610ba1565b6121f357600d546121cb83610ca1565b6121d59083613780565b11156121f35760405162461bcd60e51b81526004016108f3906135f8565b600954600160a01b900460ff16801561220f575060235460ff16155b80156122245750600e5461222230610ca1565b115b801561223e57506007546001600160a01b03848116911614155b8015612250575061224e83610b71565b155b8015612262575061226082610b71565b155b1561227257612272600e546124e7565b60235460ff161561228284610b71565b80612291575061229183610b71565b806122a957506006546001600160a01b038481169116145b156122b2575060005b8160008215612482576007546001600160a01b0386811691161480156122da57506000601654115b15612392576064601654836122ef91906137b8565b6122f99190613798565b90506016546013548261230c91906137b8565b6123169190613798565b601760008282546123279190613780565b909155505060165460145461233c90836137b8565b6123469190613798565b601860008282546123579190613780565b909155505060165460155461236c90836137b8565b6123769190613798565b601960008282546123879190613780565b909155506124649050565b6007546001600160a01b0387811691161480156123b157506000601254115b15612464576064601254836123c691906137b8565b6123d09190613798565b9050601254600f54826123e391906137b8565b6123ed9190613798565b601760008282546123fe9190613780565b909155505060125460105461241390836137b8565b61241d9190613798565b6018600082825461242e9190613780565b909155505060125460115461244390836137b8565b61244d9190613798565b6019600082825461245e9190613780565b90915550505b8015612482576124758630836126a4565b61247f81836137d7565b91505b61248d8686846126a4565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6023805460ff191660011790556019546018546017546000929161250a91613780565b6125149190613780565b9050806125215750612697565b60006002826018548561253491906137b8565b61253e9190613798565b6125489190613798565b905061255c61255782856137d7565b6127b8565b6017544790600090849061257090846137b8565b61257a9190613798565b90506000846018548461258d91906137b8565b6125979190613798565b6008546040519192506000916001600160a01b039091169084906125ba90612cbb565b60006040518083038185875af1925050503d80600081146125f7576040519150601f19603f3d011682016040523d82523d6000602084013e6125fc565b606091505b509091505084158015906126105750600082115b1561261f5761261f8583612935565b6009546040516001600160a01b0390911690479061263c90612cbb565b60006040518083038185875af1925050503d8060008114612679576040519150601f19603f3d011682016040523d82523d6000602084013e61267e565b606091505b5050600060178190556018819055601955505050505050505b506023805460ff19169055565b6001600160a01b0383166126ca5760405162461bcd60e51b81526004016108f390613339565b6001600160a01b0382166126f05760405162461bcd60e51b81526004016108f390612de4565b6001600160a01b038316600090815260208190526040902054818110156127295760405162461bcd60e51b81526004016108f390612f39565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612760908490613780565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127aa91906136f9565b60405180910390a350505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127fb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561284f57600080fd5b505afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128879190612aab565b816001815181106128a857634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526006546128ce9130911684611c9c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612907908590600090869030904290600401613702565b600060405180830381600087803b15801561292157600080fd5b505af115801561248d573d6000803e3d6000fd5b60065461294d9030906001600160a01b031684611c9c565b60065460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061298c9030908790600090819061dead904290600401612d05565b6060604051808303818588803b1580156129a557600080fd5b505af11580156129b9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c7e9190612c2c565b8035610a3881613887565b600082601f8301126129f9578081fd5b8135602067ffffffffffffffff80831115612a1657612a16613871565b81830260405183828201018181108482111715612a3557612a35613871565b60405284815283810192508684018288018501891015612a53578687fd5b8692505b85831015612a7c57612a68816129de565b845292840192600192909201918401612a57565b50979650505050505050565b600060208284031215612a99578081fd5b8135612aa481613887565b9392505050565b600060208284031215612abc578081fd5b8151612aa481613887565b60008060408385031215612ad9578081fd5b8235612ae481613887565b91506020830135612af481613887565b809150509250929050565b600080600060608486031215612b13578081fd5b8335612b1e81613887565b92506020840135612b2e81613887565b929592945050506040919091013590565b60008060408385031215612b51578182fd5b8235612b5c81613887565b91506020830135612af48161389c565b60008060408385031215612b7e578182fd5b8235612b8981613887565b946020939093013593505050565b60008060408385031215612ba9578182fd5b823567ffffffffffffffff811115612bbf578283fd5b612bcb858286016129e9565b9250506020830135612af48161389c565b600060208284031215612bed578081fd5b8135612aa48161389c565b600060208284031215612c09578081fd5b8151612aa48161389c565b600060208284031215612c25578081fd5b5035919050565b600080600060608486031215612c40578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612c70578081fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115612ca2578182fd5b612cae888289016129e9565b9150509295509295909350565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612d7757858101830151858201604001528201612d5b565b81811115612d885783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f546f6b656e3a207472616e736665722064656c617920616c72656164792064696040820152651cd8589b195960d21b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526029908201527f546f6b656e3a206578636c756465642066726f6d2066656573206164647265736040820152681cc81a5b9d985b1a5960ba1b606082015260800190565b60208082526030908201527f546f6b656e3a20636f6e747261637420746f6b656e2062616c616e6365206d7560408201526f73742062652061626f7665207a65726f60801b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252602c908201527f546f6b656e3a20626f7420626c6f636b73206d7573742072616e67652062657460408201526b7765656e203020616e64203360a01b606082015260800190565b60208082526026908201527f546f6b656e3a2074726561737572792077616c6c6574206164647265737320696040820152651b9d985b1a5960d21b606082015260800190565b60208082526030908201527f546f6b656e3a207472616e7366657220616d6f756e74206d757374206265206760408201526f726561746572207468616e207a65726f60801b606082015260800190565b6020808252602b908201527f546f6b656e3a206d61782077616c6c657420616d6f756e742063616e6e6f742060408201526a62652062656c6f7720312560a81b606082015260800190565b6020808252601f908201527f546f6b656e3a2063616c6c6572206973206e6f7420617574686f726973656400604082015260600190565b6020808252602b908201527f546f6b656e3a207377617020616d6f756e74206578636565647320636f6e747260408201526a6163742062616c616e636560a81b606082015260800190565b6020808252601d908201527f546f6b656e3a207472616e736665722064656c617920656e61626c6564000000604082015260600190565b60208082526030908201527f546f6b656e3a20626f74207365636f6e6473206d7573742072616e676520626560408201526f0747765656e20313020616e64203132360841b606082015260800190565b60208082526030908201527f546f6b656e3a20636f6e74726163742063757272656e63792062616c616e636560408201526f0206d7573742062652061626f766520360841b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f546f6b656e3a206164647265737320626c61636b6c6973746564000000000000604082015260600190565b6020808252602a908201527f546f6b656e3a206d617820545820616d6f756e742063616e6e6f742062652062604082015269656c6f7720302e37352560b01b606082015260800190565b60208082526027908201527f546f6b656e3a2073656c6c20616d6f756e742065786365656473206d6178205460408201526616081b1a5b5a5d60ca1b606082015260800190565b6020808252601e908201527f546f6b656e3a2074726164696e6720616c726561647920656e61626c65640000604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526030908201527f546f6b656e3a207377617020746f6b656e7320616d6f756e742063616e6e6f7460408201526f2062652062656c6f7720302e3030352560801b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f546f6b656e3a206c696d69747320616c72656164792064697361626c65640000604082015260600190565b6020808252602e908201527f546f6b656e3a207377617020746f6b656e7320616d6f756e742063616e6e6f7460408201526d2062652061626f766520302e312560901b606082015260800190565b6020808252601e908201527f546f6b656e3a2074726164696e67206e6f742079657420656e61626c65640000604082015260600190565b6020808252602b908201527f546f6b656e3a206578636c756465642066726f6d206d6178205458206164647260408201526a195cdcc81a5b9d985b1a5960aa1b606082015260800190565b60208082526032908201527f546f6b656e3a206e756d626572206f6620626f742061646472657373657320636040820152710616e6e6f742062652061626f7665203230360741b606082015260800190565b60208082526027908201527f546f6b656e3a2065636f73797374656d2077616c6c65742061646472657373206040820152661a5b9d985b1a5960ca1b606082015260800190565b60208082526026908201527f546f6b656e3a2062757920616d6f756e742065786365656473206d6178205458604082015265081b1a5b5a5d60d21b606082015260800190565b6020808252602b908201527f546f6b656e3a20616d6f756e7420776f756c6420657863656564206d6178207760408201526a185b1b195d081b1a5b5a5d60aa1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252604b908201527f546f6b656e3a20626f74732063616e206f6e6c7920626520626c61636b6c697360408201527f7465642077697468696e20746865206669727374203130206d696e757465732060608201526a0cce4deda40d8c2eadcc6d60ab1b608082015260a00190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156137515784516001600160a01b03168352938301939183019160010161372c565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156137935761379361385b565b500190565b6000826137b357634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156137d2576137d261385b565b500290565b6000828210156137e9576137e961385b565b500390565b6000816137fd576137fd61385b565b506000190190565b60028104600182168061381957607f821691505b6020821081141561383a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156138545761385461385b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111d057600080fd5b80151581146111d057600080fdfea2646970667358221220b1e2a04ab109ddf95c4378c42b15cf1d108ebc5fa4799c053f9237913eb6192964736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000182ec9758175f72b70546213321e6111470dc5f000000000000000000000000034e690237b5ce205eca4a4e40a3a2a76587aa2d

-----Decoded View---------------
Arg [0] : treasuryWallet_ (address): 0x0182ec9758175F72b70546213321E6111470Dc5f
Arg [1] : ecosystemWallet_ (address): 0x034e690237b5ce205EcA4a4e40A3a2a76587aA2D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000182ec9758175f72b70546213321e6111470dc5f
Arg [1] : 000000000000000000000000034e690237b5ce205eca4a4e40a3a2a76587aa2d


Deployed Bytecode Sourcemap

10062:16662:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4393:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10129:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5329:205::-;;;;;;;;;;-1:-1:-1;5329:205:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4714:108::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18549:224::-;;;;;;;;;;-1:-1:-1;18549:224:0;;;;;:::i;:::-;;:::i;:::-;;5542:265;;;;;;;;;;-1:-1:-1;5542:265:0;;;;;:::i;:::-;;:::i;16512:251::-;;;;;;;;;;-1:-1:-1;16512:251:0;;;;;:::i;:::-;;:::i;4613:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10346:33::-;;;;;;;;;;;;;:::i;5815:242::-;;;;;;;;;;-1:-1:-1;5815:242:0;;;;;:::i;:::-;;:::i;19898:107::-;;;;;;;;;;-1:-1:-1;19898:107:0;;;;;:::i;:::-;;:::i;10246:30::-;;;;;;;;;;;;;:::i;16771:494::-;;;;;;;;;;-1:-1:-1;16771:494:0;;;;;:::i;:::-;;:::i;10210:29::-;;;;;;;;;;;;;:::i;17799:142::-;;;;;;;;;;-1:-1:-1;17799:142:0;;;;;:::i;:::-;;:::i;11702:28::-;;;;;;;;;;;;;:::i;10723:33::-;;;;;;;;;;;;;:::i;10665:31::-;;;;;;;;;;;;;:::i;18397:144::-;;;;;;;;;;-1:-1:-1;18397:144:0;;;;;:::i;:::-;;:::i;20503:283::-;;;;;;;;;;;;;:::i;11059:84::-;;;;;;;;;;;;;:::i;10934:34::-;;;;;;;;;;;;;:::i;10308:31::-;;;;;;;;;;;;;:::i;4830:127::-;;;;;;;;;;-1:-1:-1;4830:127:0;;;;;:::i;:::-;;:::i;9080:103::-;;;;;;;;;;;;;:::i;11017:35::-;;;;;;;;;;;;;:::i;8857:87::-;;;;;;;;;;;;;:::i;4501:104::-;;;;;;;;;;;;;:::i;18781:1109::-;;;;;;;;;;-1:-1:-1;18781:1109:0;;;;;:::i;:::-;;:::i;6065:440::-;;;;;;;;;;-1:-1:-1;6065:440:0;;;;;:::i;:::-;;:::i;14792:550::-;;;;;;;;;;-1:-1:-1;14792:550:0;;;;;:::i;:::-;;:::i;4965:197::-;;;;;;;;;;-1:-1:-1;4965:197:0;;;;;:::i;:::-;;:::i;10804:34::-;;;;;;;;;;;;;:::i;17273:518::-;;;;;;;;;;-1:-1:-1;17273:518:0;;;;;:::i;:::-;;:::i;10431:39::-;;;;;;;;;;;;;:::i;12883:1901::-;;;;;;;;;;-1:-1:-1;12883:1901:0;;;;;:::i;:::-;;:::i;17949:440::-;;;;;;;;;;-1:-1:-1;17949:440:0;;;;;:::i;:::-;;:::i;10845:80::-;;;;;;;;;;;;;:::i;11464:33::-;;;;;;;;;;;;;:::i;5170:151::-;;;;;;;;;;-1:-1:-1;5170:151:0;;;;;:::i;:::-;;:::i;16075:182::-;;;;;;;;;;;;;:::i;20013:482::-;;;;;;;;;;-1:-1:-1;20013:482:0;;;;;:::i;:::-;;:::i;16265:239::-;;;;;;;;;;-1:-1:-1;16265:239:0;;;;;:::i;:::-;;:::i;10763:34::-;;;;;;;;;;;;;:::i;10163:22::-;;;;;;;;;;;;;:::i;15350:562::-;;;;;;;;;;-1:-1:-1;15350:562:0;;;;;:::i;:::-;;:::i;10975:35::-;;;;;;;;;;;;;:::i;15920:147::-;;;;;;;;;;;;;:::i;4393:100::-;4447:13;4480:5;4473:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4393:100;:::o;10129:27::-;;;-1:-1:-1;;;;;10129:27:0;;:::o;5329:205::-;5412:4;5429:13;5445:12;:10;:12::i;:::-;5429:28;;5470:32;5479:5;5486:7;5495:6;5470:8;:32::i;:::-;-1:-1:-1;5522:4:0;;5329:205;-1:-1:-1;;;5329:205:0:o;4714:108::-;4802:12;;4714:108;:::o;18549:224::-;18642:7;:5;:7::i;:::-;-1:-1:-1;;;;;18626:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;18626:23:0;;:58;;;-1:-1:-1;18669:15:0;;-1:-1:-1;;;;;18669:15:0;18653:12;:10;:12::i;:::-;-1:-1:-1;;;;;18653:31:0;;18626:58;18618:102;;;;-1:-1:-1;;;18618:102:0;;;;;;;:::i;:::-;;;;;;;;;18733:14;:32;;-1:-1:-1;;18733:32:0;;;;;;;;;;18549:224::o;5542:265::-;5639:4;5656:15;5674:12;:10;:12::i;:::-;5656:30;;5699:38;5715:4;5721:7;5730:6;5699:15;:38::i;:::-;5748:27;5758:4;5764:2;5768:6;5748:9;:27::i;:::-;-1:-1:-1;5795:4:0;;5542:265;-1:-1:-1;;;;5542:265:0:o;16512:251::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;16647:4:::1;16640:3;16624:13;:11;:13::i;:::-;:19;;;;:::i;:::-;16623:28;;;;:::i;:::-;16602:16;:50;;16594:106;;;;-1:-1:-1::0;;;16594:106:0::1;;;;;;;:::i;:::-;16732:23;:16:::0;16751:4:::1;16732:23;:::i;:::-;16713:16;:42:::0;-1:-1:-1;16512:251:0:o;4613:93::-;4696:2;4613:93;:::o;10346:33::-;;;-1:-1:-1;;;10346:33:0;;;;;:::o;5815:242::-;5903:4;5920:13;5936:12;:10;:12::i;:::-;5920:28;;5961:64;5970:5;5977:7;6014:10;5986:25;5996:5;6003:7;5986:9;:25::i;:::-;:38;;;;:::i;:::-;5961:8;:64::i;19898:107::-;-1:-1:-1;;;;;19979:18:0;;19955:4;19979:18;;;:5;:18;;;;;;;;19898:107;;;;:::o;10246:30::-;;;-1:-1:-1;;;;;10246:30:0;;:::o;16771:494::-;16869:7;:5;:7::i;:::-;-1:-1:-1;;;;;16853:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;16853:23:0;;:58;;;-1:-1:-1;16896:15:0;;-1:-1:-1;;;;;16896:15:0;16880:12;:10;:12::i;:::-;-1:-1:-1;;;;;16880:31:0;;16853:58;16845:102;;;;-1:-1:-1;;;16845:102:0;;;;;;;:::i;:::-;17021:4;17011:6;16990:13;:11;:13::i;:::-;:17;;17006:1;16990:17;:::i;:::-;16989:28;;;;:::i;:::-;16988:37;;;;:::i;:::-;16966:17;:60;;16958:121;;;;-1:-1:-1;;;16958:121:0;;;;;;;:::i;:::-;17145:4;17137;17121:13;:11;:13::i;:::-;:20;;;;:::i;:::-;17120:29;;;;:::i;:::-;17098:17;:52;;17090:111;;;;-1:-1:-1;;;17090:111:0;;;;;;;:::i;:::-;17233:24;:17;17253:4;17233:24;:::i;:::-;17214:16;:43;-1:-1:-1;16771:494:0:o;10210:29::-;;;-1:-1:-1;;;;;10210:29:0;;:::o;17799:142::-;-1:-1:-1;;;;;17897:36:0;17873:4;17897:36;;;:19;:36;;;;;;;;;17799:142::o;11702:28::-;;;;:::o;10723:33::-;;;;:::o;10665:31::-;;;;:::o;18397:144::-;-1:-1:-1;;;;;18496:37:0;18472:4;18496:37;;;:20;:37;;;;;;;;;18397:144::o;20503:283::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;20587:21:::1;20629:19:::0;20621:80:::1;;;;-1:-1:-1::0;;;20621:80:0::1;;;;;;;:::i;:::-;20715:12;20733;:10;:12::i;:::-;-1:-1:-1::0;;;;;20733:17:0::1;20758:15;20733:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;20503:283:0:o;11059:84::-;;;;:::o;10934:34::-;;;;:::o;10308:31::-;;;-1:-1:-1;;;10308:31:0;;;;;:::o;4830:127::-;-1:-1:-1;;;;;4931:18:0;4904:7;4931:18;;;;;;;;;;;;4830:127::o;9080:103::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;9145:30:::1;9172:1;9145:18;:30::i;:::-;9080:103::o:0;11017:35::-;;;;:::o;8857:87::-;8930:6;;-1:-1:-1;;;;;8930:6:0;8857:87;:::o;4501:104::-;4557:13;4590:7;4583:14;;;;;:::i;18781:1109::-;18894:7;:5;:7::i;:::-;-1:-1:-1;;;;;18878:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;18878:23:0;;:58;;;-1:-1:-1;18921:15:0;;-1:-1:-1;;;;;18921:15:0;18905:12;:10;:12::i;:::-;-1:-1:-1;;;;;18905:31:0;;18878:58;18870:102;;;;-1:-1:-1;;;18870:102:0;;;;;;;:::i;:::-;19014:1;18991:13;:20;:24;:55;;;;;19043:3;19019:13;:20;:27;;18991:55;18983:118;;;;-1:-1:-1;;;18983:118:0;;;;;;;:::i;:::-;19118:15;:34;;;;-1:-1:-1;19137:15:0;;-1:-1:-1;;;19137:15:0;;;;19118:34;19114:202;;;19197:11;;:26;;19212:10;19197:26;:::i;:::-;19177:15;:47;;19169:135;;;;-1:-1:-1;;;19169:135:0;;;;;;;:::i;:::-;19333:9;19328:555;19352:13;:20;19348:1;:24;19328:555;;;19398:15;:197;;;;;19438:7;:5;:7::i;:::-;-1:-1:-1;;;;;19418:27:0;:13;19432:1;19418:16;;;;;;-1:-1:-1;;;19418:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19418:27:0;;:64;;;;19477:4;-1:-1:-1;;;;;19449:33:0;:13;19463:1;19449:16;;;;;;-1:-1:-1;;;19449:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19449:33:0;;19418:64;:103;;;;19514:6;-1:-1:-1;;;;;19486:35:0;:13;19500:1;19486:16;;;;;;-1:-1:-1;;;19486:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19486:35:0;;19418:103;:134;;;-1:-1:-1;19545:7:0;;19525:16;;-1:-1:-1;;;;;19545:7:0;;;;19525:13;;19539:1;;19525:16;;;;-1:-1:-1;;;19525:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19525:27:0;;19418:134;:176;;;-1:-1:-1;19584:9:0;;19556:16;;-1:-1:-1;;;;;19584:9:0;;;;19556:13;;19570:1;;19556:16;;;;-1:-1:-1;;;19556:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19556:38:0;;19418:176;19394:211;;;19597:8;;19394:211;19653:15;19626:42;;:5;:23;19632:13;19646:1;19632:16;;;;;;-1:-1:-1;;;19632:16:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19626:23:0;;;;;;;;;;;-1:-1:-1;19626:23:0;;;;:42;;;19622:56;;;19670:8;;19622:56;19721:15;19695:5;:23;19701:13;19715:1;19701:16;;;;;;-1:-1:-1;;;19701:16:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19695:23:0;-1:-1:-1;;;;;19695:23:0;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;19757:15;19753:119;;;19793:9;:11;;;:9;:11;;;:::i;:::-;;;;;;19753:119;;;19845:9;:11;;;:9;:11;;;:::i;:::-;;;;;;19753:119;19374:3;;;;:::i;:::-;;;;19328:555;;;;18781:1109;;:::o;6065:440::-;6158:4;6175:13;6191:12;:10;:12::i;:::-;6175:28;;6214:24;6241:25;6251:5;6258:7;6241:9;:25::i;:::-;6214:52;;6307:15;6287:16;:35;;6279:85;;;;-1:-1:-1;;;6279:85:0;;;;;;;:::i;:::-;6402:60;6411:5;6418:7;6446:15;6427:16;:34;6402:8;:60::i;14792:550::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14880:29:0;::::1;14872:80;;;;-1:-1:-1::0;;;14872:80:0::1;;;;;;;:::i;:::-;14988:14;::::0;14969:34:::1;::::0;-1:-1:-1;;;;;14988:14:0::1;14969:18;:34::i;:::-;14965:105;;;15036:14;::::0;15020:38:::1;::::0;-1:-1:-1;;;;;15036:14:0::1;;15020:15;:38::i;:::-;15106:14;::::0;15086:35:::1;::::0;-1:-1:-1;;;;;15106:14:0::1;15086:19;:35::i;:::-;15082:107;;;15155:14;::::0;15138:39:::1;::::0;-1:-1:-1;;;;;15155:14:0::1;;15138:16;:39::i;:::-;15201:14;:32:::0;;-1:-1:-1;;;;;;15201:32:0::1;-1:-1:-1::0;;;;;15201:32:0;::::1;;::::0;;15246:38:::1;15201:32:::0;-1:-1:-1;15246:15:0::1;:38::i;:::-;15295:39;15312:15;15329:4;15295:16;:39::i;:::-;14792:550:::0;:::o;4965:197::-;5044:4;5061:13;5077:12;:10;:12::i;:::-;5061:28;;5102;5112:5;5119:2;5123:6;5102:9;:28::i;10804:34::-;;;;:::o;17273:518::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;17373:11:::1;17369:352;;;17436:9;::::0;-1:-1:-1;;;;;17409:37:0;;::::1;17436:9:::0;::::1;17409:37;::::0;::::1;::::0;:67:::1;;-1:-1:-1::0;17469:7:0::1;::::0;-1:-1:-1;;;;;17450:26:0;;::::1;17469:7:::0;::::1;17450:26;;17409:67;17401:121;;;;-1:-1:-1::0;;;17401:121:0::1;;;;;;;:::i;:::-;17369:352;;;17582:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;17563:26:0::1;:15;-1:-1:-1::0;;;;;17563:26:0::1;;;:62;;;;-1:-1:-1::0;;;;;;17593:32:0;::::1;17620:4;17593:32;;17563:62;:100;;;;-1:-1:-1::0;;;;;;17629:34:0;::::1;17656:6;17629:34;;17563:100;17555:154;;;;-1:-1:-1::0;;;17555:154:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17733:36:0;;;::::1;;::::0;;;:19:::1;:36;::::0;;;;:50;;-1:-1:-1;;17733:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17273:518::o;10431:39::-;;;-1:-1:-1;;;10431:39:0;;;;;:::o;12883:1901::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;13058:15:::1;::::0;-1:-1:-1;;;13058:15:0;::::1;;;13057:16;13049:59;;;;-1:-1:-1::0;;;13049:59:0::1;;;;;;;:::i;:::-;13160:1;13146:10;:15;;13119:91;;;;-1:-1:-1::0;;;13119:91:0::1;;;;;;;:::i;:::-;13244:2;13229:11;:17;;:39;;;;;13265:3;13250:11;:18;;13229:39;13221:100;;;;-1:-1:-1::0;;;13221:100:0::1;;;;;;;:::i;:::-;13363:1;13340:13;:20;:24;:55;;;;;13392:3;13368:13;:20;:27;;13340:55;13332:118;;;;-1:-1:-1::0;;;13332:118:0::1;;;;;;;:::i;:::-;13506:9;;;;;;;;;-1:-1:-1::0;;;;;13506:9:0::1;-1:-1:-1::0;;;;;13506:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13494:43:0::1;;13546:4;13553:9;;;;;;;;;-1:-1:-1::0;;;;;13553:9:0::1;-1:-1:-1::0;;;;;13553:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13494:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13484:7;:86:::0;;-1:-1:-1;;;;;;13484:86:0::1;-1:-1:-1::0;;;;;13484:86:0;;;::::1;::::0;;;::::1;::::0;;13613:30:::1;13629:7;:5;:7::i;:::-;13638:4;13613:15;:30::i;:::-;13654:36;13678:4;13685;13654:15;:36::i;:::-;13701:38;13725:6;13734:4;13701:15;:38::i;:::-;13785:31;13802:7;:5;:7::i;:::-;13811:4;13785:16;:31::i;:::-;13827:37;13852:4;13859;13827:16;:37::i;:::-;13875:39;13900:6;13909:4;13875:16;:39::i;:::-;13950:9;::::0;13925:42:::1;::::0;-1:-1:-1;;;;;13950:9:0::1;::::0;13925:16:::1;:42::i;:::-;13995:7;::::0;13978:31:::1;::::0;-1:-1:-1;;;;;13995:7:0::1;::::0;13978:16:::1;:31::i;:::-;14048:9;::::0;-1:-1:-1;;;;;14048:9:0::1;:25;14081:21;14112:4;14119:24;14112:4:::0;14119:9:::1;:24::i;:::-;14145:1;14148::::0;14151:7:::1;:5;:7::i;:::-;14160:15;14048:128;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14194:7:0::1;::::0;14219:9:::1;::::0;14187:62:::1;::::0;-1:-1:-1;;;14187:62:0;;-1:-1:-1;;;;;14194:7:0;;::::1;::::0;-1:-1:-1;14187:23:0::1;::::0;:62:::1;::::0;14219:9:::1;::::0;-1:-1:-1;;14231:17:0;14187:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14283:28;14291:13;14306:4;14283:7;:28::i;:::-;14351;14366:12;14351:14;:28::i;:::-;14390:36;14409:16;14390:18;:36::i;:::-;14437:57;14489:4;14480:5;14459:13;:11;:13::i;:::-;:17;::::0;14475:1:::1;14459:17;:::i;:::-;14458:27;;;;:::i;:::-;14457:36;;;;:::i;14437:57::-;-1:-1:-1::0;;14558:15:0::1;14544:11;:29:::0;-1:-1:-1;14599:12:0::1;14584;:27:::0;14622:10:::1;:23:::0;;;;14656:11:::1;:25:::0;14694:11:::1;:18:::0;;-1:-1:-1;;;;;;;;;;;;14694:18:0;;::::1;-1:-1:-1::0;;;14694:18:0::1;14723:20:::0;;;::::1;-1:-1:-1::0;;;14723:20:0::1;14754:22;-1:-1:-1::0;;;14754:22:0::1;::::0;;12883:1901::o;17949:440::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;18051:11:::1;18046:272;;18106:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;18087:26:0::1;:15;-1:-1:-1::0;;;;;18087:26:0::1;;;:62;;;;-1:-1:-1::0;;;;;;18117:32:0;::::1;18144:4;18117:32;;18087:62;:100;;;;-1:-1:-1::0;;;;;;18153:34:0;::::1;18180:6;18153:34;;18087:100;:141;;;;-1:-1:-1::0;18218:9:0::1;::::0;-1:-1:-1;;;;;18191:37:0;;::::1;18218:9:::0;::::1;18191:37;;18087:141;:171;;;;-1:-1:-1::0;18251:7:0::1;::::0;-1:-1:-1;;;;;18232:26:0;;::::1;18251:7:::0;::::1;18232:26;;18087:171;18079:227;;;;-1:-1:-1::0;;;18079:227:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18330:37:0;;;::::1;;::::0;;;:20:::1;:37;::::0;;;;:51;;-1:-1:-1;;18330:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17949:440::o;10845:80::-;;;;:::o;11464:33::-;;;;;;:::o;5170:151::-;-1:-1:-1;;;;;5286:18:0;;;5259:7;5286:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5170:151::o;16075:182::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;16145:20:::1;::::0;-1:-1:-1;;;16145:20:0;::::1;;;16137:71;;;;-1:-1:-1::0;;;16137:71:0::1;;;;;;;:::i;:::-;16221:20;:28:::0;;-1:-1:-1;;;;16221:28:0::1;::::0;;16075:182::o;20013:482::-;20099:7;:5;:7::i;:::-;-1:-1:-1;;;;;20083:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;20083:23:0;;:58;;;-1:-1:-1;20126:15:0;;-1:-1:-1;;;;;20126:15:0;20110:12;:10;:12::i;:::-;-1:-1:-1;;;;;20110:31:0;;20083:58;20075:102;;;;-1:-1:-1;;;20075:102:0;;;;;;;:::i;:::-;20190:28;20221:24;20239:4;20221:9;:24::i;:::-;20190:55;;20289:1;20266:20;:24;20258:85;;;;-1:-1:-1;;;20258:85:0;;;;;;;:::i;:::-;20379:20;20362:13;:37;;20354:93;;;;-1:-1:-1;;;20354:93:0;;;;;;;:::i;:::-;20460:27;20473:13;20460:12;:27::i;:::-;20013:482;;:::o;16265:239::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;16397:4:::1;16388:5;16366:13;:11;:13::i;:::-;:18;::::0;16382:2:::1;16366:18;:::i;:::-;16365:28;;;;:::i;:::-;16364:37;;;;:::i;:::-;16347:12;:55;;16339:110;;;;-1:-1:-1::0;;;16339:110:0::1;;;;;;;:::i;:::-;16477:19;:12:::0;16492:4:::1;16477:19;:::i;:::-;16462:12;:34:::0;-1:-1:-1;16265:239:0:o;10763:34::-;;;;:::o;10163:22::-;;;-1:-1:-1;;;;;10163:22:0;;:::o;15350:562::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15440:30:0;::::1;15432:82;;;;-1:-1:-1::0;;;15432:82:0::1;;;;;;;:::i;:::-;15550:15;::::0;15531:35:::1;::::0;-1:-1:-1;;;;;15550:15:0::1;15531:18;:35::i;:::-;15527:107;;;15599:15;::::0;15583:39:::1;::::0;-1:-1:-1;;;;;15599:15:0::1;;15583;:39::i;:::-;15670:15;::::0;15650:36:::1;::::0;-1:-1:-1;;;;;15670:15:0::1;15650:19;:36::i;:::-;15646:109;;;15720:15;::::0;15703:40:::1;::::0;-1:-1:-1;;;;;15720:15:0::1;;15703:16;:40::i;:::-;15767:15;:34:::0;;-1:-1:-1;;;;;;15767:34:0::1;-1:-1:-1::0;;;;;15767:34:0;::::1;;::::0;;15814:39:::1;15767:34:::0;-1:-1:-1;15814:15:0::1;:39::i;10975:35::-:0;;;;:::o;15920:147::-;9003:12;:10;:12::i;:::-;-1:-1:-1;;;;;8992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;8992:23:0;;8984:68;;;;-1:-1:-1;;;8984:68:0;;;;;;;:::i;:::-;15977:13:::1;::::0;-1:-1:-1;;;15977:13:0;::::1;;;15969:56;;;;-1:-1:-1::0;;;15969:56:0::1;;;;;;;:::i;:::-;16038:13;:21:::0;;-1:-1:-1;;;;16038:21:0::1;::::0;;15920:147::o;2982:98::-;3062:10;2982:98;:::o;7831:348::-;-1:-1:-1;;;;;7933:19:0;;7925:68;;;;-1:-1:-1;;;7925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8012:21:0;;8004:68;;;;-1:-1:-1;;;8004:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8085:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;8139:32;;;;;8115:6;;8139:32;:::i;:::-;;;;;;;;7831:348;;;:::o;8187:423::-;8288:24;8315:25;8325:5;8332:7;8315:9;:25::i;:::-;8288:52;;-1:-1:-1;;8357:16:0;:37;8353:250;;8439:6;8419:16;:26;;8411:68;;;;-1:-1:-1;;;8411:68:0;;;;;;;:::i;:::-;8525:51;8534:5;8541:7;8569:6;8550:16;:25;8525:8;:51::i;:::-;8187:423;;;;:::o;20794:4096::-;-1:-1:-1;;;;;20892:18:0;;20884:68;;;;-1:-1:-1;;;20884:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20971:16:0;;20963:64;;;;-1:-1:-1;;;20963:64:0;;;;;;;:::i;:::-;21055:1;21046:6;:10;21038:71;;;;-1:-1:-1;;;21038:71:0;;;;;;;:::i;:::-;21147:14;;;;21143:112;;;-1:-1:-1;;;;;21187:9:0;;;;;;:5;:9;;;;;;;;21186:10;:26;;;;-1:-1:-1;;;;;;21201:11:0;;;;;;:5;:11;;;;;;;;21200:12;21186:26;21178:65;;;;-1:-1:-1;;;21178:65:0;;;;;;;:::i;:::-;21300:15;;-1:-1:-1;;;21300:15:0;;;;21295:142;;21340:24;21359:4;21340:18;:24::i;:::-;:50;;;;21368:22;21387:2;21368:18;:22::i;:::-;21332:93;;;;-1:-1:-1;;;21332:93:0;;;;;;;:::i;:::-;21453:13;;-1:-1:-1;;;21453:13:0;;;;:31;;;;-1:-1:-1;21471:13:0;;;;21470:14;21453:31;:50;;;;;21496:7;:5;:7::i;:::-;-1:-1:-1;;;;;21488:15:0;:4;-1:-1:-1;;;;;21488:15:0;;;21453:50;:67;;;;;21513:7;:5;:7::i;:::-;-1:-1:-1;;;;;21507:13:0;:2;-1:-1:-1;;;;;21507:13:0;;;21453:67;:87;;;;-1:-1:-1;;;;;;21524:16:0;;;;21453:87;:112;;;;-1:-1:-1;;;;;;21544:21:0;;21558:6;21544:21;;21453:112;21449:1695;;;21673:11;;21659;;:25;;;;:::i;:::-;21639:15;:46;;:93;;;;21721:10;;21706:12;;:25;;;;:::i;:::-;21689:12;:43;;21639:93;21638:118;;;;-1:-1:-1;;;;;;21737:19:0;;21751:4;21737:19;;21638:118;:135;;;;-1:-1:-1;21766:7:0;;-1:-1:-1;;;;;21760:13:0;;;21766:7;;21760:13;;21638:135;:163;;;;-1:-1:-1;21791:9:0;;-1:-1:-1;;;;;21777:24:0;;;21791:9;;21777:24;;21638:163;21634:252;;;-1:-1:-1;;;;;21822:9:0;;;;;;:5;:9;;;;;:16;;-1:-1:-1;;21822:16:0;21834:4;21822:16;;;21859:9;:11;;;;;;:::i;:::-;;;;;;21634:252;21969:20;;-1:-1:-1;;;21969:20:0;;;;:45;;;;-1:-1:-1;;;;;;21993:21:0;;22009:4;21993:21;;21969:45;:62;;;;-1:-1:-1;22024:7:0;;-1:-1:-1;;;;;22018:13:0;;;22024:7;;22018:13;;21969:62;:90;;;;-1:-1:-1;22049:9:0;;-1:-1:-1;;;;;22035:24:0;;;22049:9;;22035:24;;21969:90;21965:429;;;22136:20;;22121:35;;:12;:35;:::i;:::-;22107:9;22088:29;;;;:18;:29;;;;;;:69;:135;;;;-1:-1:-1;22202:20:0;;22187:35;;:12;:35;:::i;:::-;-1:-1:-1;;;;;22161:22:0;;;;;;:18;:22;;;;;;:62;22088:135;22080:177;;;;-1:-1:-1;;;22080:177:0;;;;;;;:::i;:::-;22297:9;22278:29;;;;:18;:29;;;;;;22310:12;22278:44;;;;-1:-1:-1;;;;;22341:22:0;;;;;;:37;21965:429;22460:7;;-1:-1:-1;;;;;22452:15:0;;;22460:7;;22452:15;:43;;;;;22472:23;22492:2;22472:19;:23::i;:::-;22471:24;22452:43;22448:685;;;22558:12;;22548:6;:22;;22540:73;;;;-1:-1:-1;;;22540:73:0;;;;;;;:::i;:::-;22666:16;;22649:13;22659:2;22649:9;:13::i;:::-;22640:22;;:6;:22;:::i;:::-;:42;;22632:98;;;;-1:-1:-1;;;22632:98:0;;;;;;;:::i;:::-;22448:685;;;22762:7;;-1:-1:-1;;;;;22756:13:0;;;22762:7;;22756:13;:43;;;;;22774:25;22794:4;22774:19;:25::i;:::-;22773:26;22756:43;22752:381;;;22863:12;;22853:6;:22;;22845:74;;;;-1:-1:-1;;;22845:74:0;;;;;;;:::i;22752:381::-;22946:23;22966:2;22946:19;:23::i;:::-;22941:192;;23053:16;;23036:13;23046:2;23036:9;:13::i;:::-;23027:22;;:6;:22;:::i;:::-;:42;;23019:98;;;;-1:-1:-1;;;23019:98:0;;;;;;;:::i;:::-;23225:11;;-1:-1:-1;;;23225:11:0;;;;:29;;;;-1:-1:-1;23241:13:0;;;;23240:14;23225:29;:76;;;;;23285:16;;23258:24;23276:4;23258:9;:24::i;:::-;:43;23225:76;:95;;;;-1:-1:-1;23313:7:0;;-1:-1:-1;;;;;23305:15:0;;;23313:7;;23305:15;;23225:95;:124;;;;;23325:24;23344:4;23325:18;:24::i;:::-;23324:25;23225:124;:151;;;;;23354:22;23373:2;23354:18;:22::i;:::-;23353:23;23225:151;23221:214;;;23393:30;23406:16;;23393:12;:30::i;:::-;23466:13;;;;23465:14;23541:24;23560:4;23541:18;:24::i;:::-;:50;;;;23569:22;23588:2;23569:18;:22::i;:::-;23541:78;;;-1:-1:-1;23609:9:0;;-1:-1:-1;;;;;23595:24:0;;;23609:9;;23595:24;23541:78;23537:129;;;-1:-1:-1;23649:5:0;23537:129;23701:6;23679:19;23810:1022;;;;23851:7;;-1:-1:-1;;;;;23845:13:0;;;23851:7;;23845:13;:34;;;;;23878:1;23862:13;;:17;23845:34;23841:817;;;23969:3;23952:13;;23938:11;:27;;;;:::i;:::-;23937:35;;;;:::i;:::-;23925:47;;24045:13;;24026:15;;24014:9;:27;;;;:::i;:::-;24013:45;;;;:::i;:::-;23991:18;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;24133:13:0;;24113:16;;24101:28;;:9;:28;:::i;:::-;24100:46;;;;:::i;:::-;24077:19;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;24221:13:0;;24201:16;;24189:28;;:9;:28;:::i;:::-;24188:46;;;;:::i;:::-;24165:19;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;23841:817:0;;-1:-1:-1;23841:817:0;;24268:7;;-1:-1:-1;;;;;24260:15:0;;;24268:7;;24260:15;:35;;;;;24294:1;24279:12;;:16;24260:35;24256:402;;;24383:3;24367:12;;24353:11;:26;;;;:::i;:::-;24352:34;;;;:::i;:::-;24340:46;;24458:12;;24440:14;;24428:9;:26;;;;:::i;:::-;24427:43;;;;:::i;:::-;24405:18;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;24544:12:0;;24525:15;;24513:27;;:9;:27;:::i;:::-;24512:44;;;;:::i;:::-;24489:19;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;24630:12:0;;24611:15;;24599:27;;:9;:27;:::i;:::-;24598:44;;;;:::i;:::-;24575:19;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;24256:402:0;24679:13;;24675:146;;24713:47;24729:4;24743;24750:9;24713:15;:47::i;:::-;24781:24;24796:9;24781:24;;:::i;:::-;;;24675:146;24844:38;24860:4;24866:2;24870:11;24844:15;:38::i;:::-;20794:4096;;;;;;:::o;9191:193::-;9284:6;;;-1:-1:-1;;;;;9301:17:0;;;-1:-1:-1;;;;;;9301:17:0;;;;;;;9336:40;;9284:6;;;9301:17;9284:6;;9336:40;;9265:16;;9336:40;9191:193;;:::o;24898:1095::-;11830:13;:20;;-1:-1:-1;;11830:20:0;11846:4;11830:20;;;25035:19:::1;::::0;25013::::1;::::0;24992:18:::1;::::0;11830:13;;25035:19;24992:40:::1;::::0;::::1;:::i;:::-;:62;;;;:::i;:::-;24970:84:::0;-1:-1:-1;25071:16:0;25067:29:::1;;25089:7;;;25067:29;25108:27;25193:1;25178:11;25155:19;;25140:12;:34;;;;:::i;:::-;25139:50;;;;:::i;:::-;25138:56;;;;:::i;:::-;25108:86:::0;-1:-1:-1;25207:58:0::1;25230:34;25108:86:::0;25230:12;:34:::1;:::i;:::-;25207:22;:58::i;:::-;25388:18;::::0;25305:21:::1;::::0;25279:23:::1;::::0;25410:11;;25370:36:::1;::::0;25305:21;25370:36:::1;:::i;:::-;25369:52;;;;:::i;:::-;25339:82;;25432:28;25505:11;25482:19;;25464:15;:37;;;;:::i;:::-;25463:53;;;;:::i;:::-;25584:14;::::0;25576:60:::1;::::0;25432:84;;-1:-1:-1;25529:16:0::1;::::0;-1:-1:-1;;;;;25584:14:0;;::::1;::::0;25612:19;;25576:60:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25558:78:0;;-1:-1:-1;;25653:23:0;;;;;:51:::1;;;25703:1;25680:20;:24;25653:51;25649:140;;;25721:56;25735:19;25756:20;25721:13;:56::i;:::-;25827:15;::::0;25819:63:::1;::::0;-1:-1:-1;;;;;25827:15:0;;::::1;::::0;25856:21:::1;::::0;25819:63:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25916:1:0::1;25895:18;:22:::0;;;25928:19:::1;:23:::0;;;25962:19:::1;:23:::0;-1:-1:-1;;;;;;;11861:1:0::1;-1:-1:-1::0;11873:13:0;:21;;-1:-1:-1;;11873:21:0;;;24898:1095::o;6513:542::-;-1:-1:-1;;;;;6610:18:0;;6602:68;;;;-1:-1:-1;;;6602:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6689:16:0;;6681:64;;;;-1:-1:-1;;;6681:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6780:15:0;;6758:19;6780:15;;;;;;;;;;;6816:21;;;;6808:72;;;;-1:-1:-1;;;6808:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6918:15:0;;;:9;:15;;;;;;;;;;;6936:20;;;6918:38;;6980:13;;;;;;;;:23;;6950:6;;6918:9;6980:23;;6950:6;;6980:23;:::i;:::-;;;;;;;;7036:2;-1:-1:-1;;;;;7021:26:0;7030:4;-1:-1:-1;;;;;7021:26:0;;7040:6;7021:26;;;;;;:::i;:::-;;;;;;;;6513:542;;;;:::o;26001:392::-;26098:16;;;26112:1;26098:16;;;;;;;;26074:21;;26098:16;;;;;;;;;;-1:-1:-1;26098:16:0;26074:40;;26143:4;26125;26130:1;26125:7;;;;;;-1:-1:-1;;;26125:7:0;;;;;;;;;-1:-1:-1;;;;;26125:23:0;;;:7;;;;;;;;;;:23;;;;26169:9;;:16;;;-1:-1:-1;;;26169:16:0;;;;:9;;;;;:14;;:16;;;;;26125:7;;26169:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26159:4;26164:1;26159:7;;;;;;-1:-1:-1;;;26159:7:0;;;;;;;;;-1:-1:-1;;;;;26159:26:0;;;:7;;;;;;;;;:26;26231:9;;26199:57;;26216:4;;26231:9;26243:12;26199:8;:57::i;:::-;26270:9;;:115;;-1:-1:-1;;;26270:115:0;;-1:-1:-1;;;;;26270:9:0;;;;:60;;:115;;26331:12;;26270:9;;26348:4;;26362;;26369:15;;26270:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26401:283;26521:9;;26489:57;;26506:4;;-1:-1:-1;;;;;26521:9:0;26533:12;26489:8;:57::i;:::-;26559:9;;:117;;-1:-1:-1;;;26559:117:0;;-1:-1:-1;;;;;26559:9:0;;;;:25;;26592:14;;26559:117;;26616:4;;26623:12;;26559:9;;;;26651:6;;26660:15;;26559:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:934::-;;270:3;263:4;255:6;251:17;247:27;237:2;;292:5;285;278:20;237:2;332:6;319:20;358:4;381:18;418:2;414;411:10;408:2;;;424:18;;:::i;:::-;471:2;467;463:11;503:2;497:9;554:2;549;541:6;537:15;533:24;607:6;595:10;592:22;587:2;575:10;572:18;569:46;566:2;;;618:18;;:::i;:::-;654:2;647:22;704:18;;;738:15;;;;-1:-1:-1;773:15:1;;;807;;;803:24;;800:33;-1:-1:-1;797:2:1;;;850:5;843;836:20;797:2;876:5;867:14;;890:171;904:2;901:1;898:9;890:171;;;961:25;982:3;961:25;:::i;:::-;949:38;;1007:12;;;;922:1;915:9;;;;;1039:12;;890:171;;;-1:-1:-1;1079:6:1;227:864;-1:-1:-1;;;;;;;227:864:1:o;1096:259::-;;1208:2;1196:9;1187:7;1183:23;1179:32;1176:2;;;1229:6;1221;1214:22;1176:2;1273:9;1260:23;1292:33;1319:5;1292:33;:::i;:::-;1344:5;1166:189;-1:-1:-1;;;1166:189:1:o;1360:263::-;;1483:2;1471:9;1462:7;1458:23;1454:32;1451:2;;;1504:6;1496;1489:22;1451:2;1541:9;1535:16;1560:33;1587:5;1560:33;:::i;1628:402::-;;;1757:2;1745:9;1736:7;1732:23;1728:32;1725:2;;;1778:6;1770;1763:22;1725:2;1822:9;1809:23;1841:33;1868:5;1841:33;:::i;:::-;1893:5;-1:-1:-1;1950:2:1;1935:18;;1922:32;1963:35;1922:32;1963:35;:::i;:::-;2017:7;2007:17;;;1715:315;;;;;:::o;2035:470::-;;;;2181:2;2169:9;2160:7;2156:23;2152:32;2149:2;;;2202:6;2194;2187:22;2149:2;2246:9;2233:23;2265:33;2292:5;2265:33;:::i;:::-;2317:5;-1:-1:-1;2374:2:1;2359:18;;2346:32;2387:35;2346:32;2387:35;:::i;:::-;2139:366;;2441:7;;-1:-1:-1;;;2495:2:1;2480:18;;;;2467:32;;2139:366::o;2510:396::-;;;2636:2;2624:9;2615:7;2611:23;2607:32;2604:2;;;2657:6;2649;2642:22;2604:2;2701:9;2688:23;2720:33;2747:5;2720:33;:::i;:::-;2772:5;-1:-1:-1;2829:2:1;2814:18;;2801:32;2842;2801;2842;:::i;2911:327::-;;;3040:2;3028:9;3019:7;3015:23;3011:32;3008:2;;;3061:6;3053;3046:22;3008:2;3105:9;3092:23;3124:33;3151:5;3124:33;:::i;:::-;3176:5;3228:2;3213:18;;;;3200:32;;-1:-1:-1;;;2998:240:1:o;3243:505::-;;;3394:2;3382:9;3373:7;3369:23;3365:32;3362:2;;;3415:6;3407;3400:22;3362:2;3460:9;3447:23;3493:18;3485:6;3482:30;3479:2;;;3530:6;3522;3515:22;3479:2;3558:67;3617:7;3608:6;3597:9;3593:22;3558:67;:::i;:::-;3548:77;;;3675:2;3664:9;3660:18;3647:32;3688:30;3712:5;3688:30;:::i;3753:253::-;;3862:2;3850:9;3841:7;3837:23;3833:32;3830:2;;;3883:6;3875;3868:22;3830:2;3927:9;3914:23;3946:30;3970:5;3946:30;:::i;4011:257::-;;4131:2;4119:9;4110:7;4106:23;4102:32;4099:2;;;4152:6;4144;4137:22;4099:2;4189:9;4183:16;4208:30;4232:5;4208:30;:::i;4273:190::-;;4385:2;4373:9;4364:7;4360:23;4356:32;4353:2;;;4406:6;4398;4391:22;4353:2;-1:-1:-1;4434:23:1;;4343:120;-1:-1:-1;4343:120:1:o;4468:316::-;;;;4625:2;4613:9;4604:7;4600:23;4596:32;4593:2;;;4646:6;4638;4631:22;4593:2;4680:9;4674:16;4664:26;;4730:2;4719:9;4715:18;4709:25;4699:35;;4774:2;4763:9;4759:18;4753:25;4743:35;;4583:201;;;;;:::o;4789:648::-;;;;;;4994:3;4982:9;4973:7;4969:23;4965:33;4962:2;;;5016:6;5008;5001:22;4962:2;5057:9;5044:23;5034:33;;5114:2;5103:9;5099:18;5086:32;5076:42;;5165:2;5154:9;5150:18;5137:32;5127:42;;5216:2;5205:9;5201:18;5188:32;5178:42;;5271:3;5260:9;5256:19;5243:33;5299:18;5291:6;5288:30;5285:2;;;5336:6;5328;5321:22;5285:2;5364:67;5423:7;5414:6;5403:9;5399:22;5364:67;:::i;:::-;5354:77;;;4952:485;;;;;;;;:::o;5442:205::-;5642:3;5633:14::o;5652:203::-;-1:-1:-1;;;;;5816:32:1;;;;5798:51;;5786:2;5771:18;;5753:102::o;5860:304::-;-1:-1:-1;;;;;6090:15:1;;;6072:34;;6142:15;;6137:2;6122:18;;6115:43;6022:2;6007:18;;5989:175::o;6169:274::-;-1:-1:-1;;;;;6361:32:1;;;;6343:51;;6425:2;6410:18;;6403:34;6331:2;6316:18;;6298:145::o;6448:607::-;-1:-1:-1;;;;;6807:15:1;;;6789:34;;6854:2;6839:18;;6832:34;;;;6897:2;6882:18;;6875:34;;;;6940:2;6925:18;;6918:34;;;;6989:15;;;6983:3;6968:19;;6961:44;6769:3;7021:19;;7014:35;;;;6738:3;6723:19;;6705:350::o;7060:187::-;7225:14;;7218:22;7200:41;;7188:2;7173:18;;7155:92::o;7478:603::-;;7619:2;7648;7637:9;7630:21;7680:6;7674:13;7723:6;7718:2;7707:9;7703:18;7696:34;7748:4;7761:140;7775:6;7772:1;7769:13;7761:140;;;7870:14;;;7866:23;;7860:30;7836:17;;;7855:2;7832:26;7825:66;7790:10;;7761:140;;;7919:6;7916:1;7913:13;7910:2;;;7989:4;7984:2;7975:6;7964:9;7960:22;7956:31;7949:45;7910:2;-1:-1:-1;8065:2:1;8044:15;-1:-1:-1;;8040:29:1;8025:45;;;;8072:2;8021:54;;7599:482;-1:-1:-1;;;7599:482:1:o;8086:402::-;8288:2;8270:21;;;8327:2;8307:18;;;8300:30;8366:34;8361:2;8346:18;;8339:62;-1:-1:-1;;;8432:2:1;8417:18;;8410:36;8478:3;8463:19;;8260:228::o;8493:399::-;8695:2;8677:21;;;8734:2;8714:18;;;8707:30;8773:34;8768:2;8753:18;;8746:62;-1:-1:-1;;;8839:2:1;8824:18;;8817:33;8882:3;8867:19;;8667:225::o;8897:398::-;9099:2;9081:21;;;9138:2;9118:18;;;9111:30;9177:34;9172:2;9157:18;;9150:62;-1:-1:-1;;;9243:2:1;9228:18;;9221:32;9285:3;9270:19;;9071:224::o;9300:405::-;9502:2;9484:21;;;9541:2;9521:18;;;9514:30;9580:34;9575:2;9560:18;;9553:62;-1:-1:-1;;;9646:2:1;9631:18;;9624:39;9695:3;9680:19;;9474:231::o;9710:412::-;9912:2;9894:21;;;9951:2;9931:18;;;9924:30;9990:34;9985:2;9970:18;;9963:62;-1:-1:-1;;;10056:2:1;10041:18;;10034:46;10112:3;10097:19;;9884:238::o;10127:353::-;10329:2;10311:21;;;10368:2;10348:18;;;10341:30;10407:31;10402:2;10387:18;;10380:59;10471:2;10456:18;;10301:179::o;10485:402::-;10687:2;10669:21;;;10726:2;10706:18;;;10699:30;10765:34;10760:2;10745:18;;10738:62;-1:-1:-1;;;10831:2:1;10816:18;;10809:36;10877:3;10862:19;;10659:228::o;10892:408::-;11094:2;11076:21;;;11133:2;11113:18;;;11106:30;11172:34;11167:2;11152:18;;11145:62;-1:-1:-1;;;11238:2:1;11223:18;;11216:42;11290:3;11275:19;;11066:234::o;11305:402::-;11507:2;11489:21;;;11546:2;11526:18;;;11519:30;11585:34;11580:2;11565:18;;11558:62;-1:-1:-1;;;11651:2:1;11636:18;;11629:36;11697:3;11682:19;;11479:228::o;11712:412::-;11914:2;11896:21;;;11953:2;11933:18;;;11926:30;11992:34;11987:2;11972:18;;11965:62;-1:-1:-1;;;12058:2:1;12043:18;;12036:46;12114:3;12099:19;;11886:238::o;12129:407::-;12331:2;12313:21;;;12370:2;12350:18;;;12343:30;12409:34;12404:2;12389:18;;12382:62;-1:-1:-1;;;12475:2:1;12460:18;;12453:41;12526:3;12511:19;;12303:233::o;12541:355::-;12743:2;12725:21;;;12782:2;12762:18;;;12755:30;12821:33;12816:2;12801:18;;12794:61;12887:2;12872:18;;12715:181::o;12901:407::-;13103:2;13085:21;;;13142:2;13122:18;;;13115:30;13181:34;13176:2;13161:18;;13154:62;-1:-1:-1;;;13247:2:1;13232:18;;13225:41;13298:3;13283:19;;13075:233::o;13313:353::-;13515:2;13497:21;;;13554:2;13534:18;;;13527:30;13593:31;13588:2;13573:18;;13566:59;13657:2;13642:18;;13487:179::o;13671:412::-;13873:2;13855:21;;;13912:2;13892:18;;;13885:30;13951:34;13946:2;13931:18;;13924:62;-1:-1:-1;;;14017:2:1;14002:18;;13995:46;14073:3;14058:19;;13845:238::o;14088:412::-;14290:2;14272:21;;;14329:2;14309:18;;;14302:30;14368:34;14363:2;14348:18;;14341:62;-1:-1:-1;;;14434:2:1;14419:18;;14412:46;14490:3;14475:19;;14262:238::o;14505:356::-;14707:2;14689:21;;;14726:18;;;14719:30;14785:34;14780:2;14765:18;;14758:62;14852:2;14837:18;;14679:182::o;14866:350::-;15068:2;15050:21;;;15107:2;15087:18;;;15080:30;15146:28;15141:2;15126:18;;15119:56;15207:2;15192:18;;15040:176::o;15221:406::-;15423:2;15405:21;;;15462:2;15442:18;;;15435:30;15501:34;15496:2;15481:18;;15474:62;-1:-1:-1;;;15567:2:1;15552:18;;15545:40;15617:3;15602:19;;15395:232::o;15632:403::-;15834:2;15816:21;;;15873:2;15853:18;;;15846:30;15912:34;15907:2;15892:18;;15885:62;-1:-1:-1;;;15978:2:1;15963:18;;15956:37;16025:3;16010:19;;15806:229::o;16040:354::-;16242:2;16224:21;;;16281:2;16261:18;;;16254:30;16320:32;16315:2;16300:18;;16293:60;16385:2;16370:18;;16214:180::o;16399:401::-;16601:2;16583:21;;;16640:2;16620:18;;;16613:30;16679:34;16674:2;16659:18;;16652:62;-1:-1:-1;;;16745:2:1;16730:18;;16723:35;16790:3;16775:19;;16573:227::o;16805:412::-;17007:2;16989:21;;;17046:2;17026:18;;;17019:30;17085:34;17080:2;17065:18;;17058:62;-1:-1:-1;;;17151:2:1;17136:18;;17129:46;17207:3;17192:19;;16979:238::o;17222:400::-;17424:2;17406:21;;;17463:2;17443:18;;;17436:30;17502:34;17497:2;17482:18;;17475:62;-1:-1:-1;;;17568:2:1;17553:18;;17546:34;17612:3;17597:19;;17396:226::o;17627:354::-;17829:2;17811:21;;;17868:2;17848:18;;;17841:30;17907:32;17902:2;17887:18;;17880:60;17972:2;17957:18;;17801:180::o;17986:410::-;18188:2;18170:21;;;18227:2;18207:18;;;18200:30;18266:34;18261:2;18246:18;;18239:62;-1:-1:-1;;;18332:2:1;18317:18;;18310:44;18386:3;18371:19;;18160:236::o;18401:354::-;18603:2;18585:21;;;18642:2;18622:18;;;18615:30;18681:32;18676:2;18661:18;;18654:60;18746:2;18731:18;;18575:180::o;18760:407::-;18962:2;18944:21;;;19001:2;18981:18;;;18974:30;19040:34;19035:2;19020:18;;19013:62;-1:-1:-1;;;19106:2:1;19091:18;;19084:41;19157:3;19142:19;;18934:233::o;19172:414::-;19374:2;19356:21;;;19413:2;19393:18;;;19386:30;19452:34;19447:2;19432:18;;19425:62;-1:-1:-1;;;19518:2:1;19503:18;;19496:48;19576:3;19561:19;;19346:240::o;19591:403::-;19793:2;19775:21;;;19832:2;19812:18;;;19805:30;19871:34;19866:2;19851:18;;19844:62;-1:-1:-1;;;19937:2:1;19922:18;;19915:37;19984:3;19969:19;;19765:229::o;19999:402::-;20201:2;20183:21;;;20240:2;20220:18;;;20213:30;20279:34;20274:2;20259:18;;20252:62;-1:-1:-1;;;20345:2:1;20330:18;;20323:36;20391:3;20376:19;;20173:228::o;20406:407::-;20608:2;20590:21;;;20647:2;20627:18;;;20620:30;20686:34;20681:2;20666:18;;20659:62;-1:-1:-1;;;20752:2:1;20737:18;;20730:41;20803:3;20788:19;;20580:233::o;20818:401::-;21020:2;21002:21;;;21059:2;21039:18;;;21032:30;21098:34;21093:2;21078:18;;21071:62;-1:-1:-1;;;21164:2:1;21149:18;;21142:35;21209:3;21194:19;;20992:227::o;21224:479::-;21426:2;21408:21;;;21465:2;21445:18;;;21438:30;21504:34;21499:2;21484:18;;21477:62;21575:34;21570:2;21555:18;;21548:62;-1:-1:-1;;;21641:3:1;21626:19;;21619:42;21693:3;21678:19;;21398:305::o;21708:177::-;21854:25;;;21842:2;21827:18;;21809:76::o;21890:983::-;;22200:3;22189:9;22185:19;22231:6;22220:9;22213:25;22257:2;22295:6;22290:2;22279:9;22275:18;22268:34;22338:3;22333:2;22322:9;22318:18;22311:31;22362:6;22397;22391:13;22428:6;22420;22413:22;22466:3;22455:9;22451:19;22444:26;;22505:2;22497:6;22493:15;22479:29;;22526:4;22539:195;22553:6;22550:1;22547:13;22539:195;;;22618:13;;-1:-1:-1;;;;;22614:39:1;22602:52;;22709:15;;;;22674:12;;;;22650:1;22568:9;22539:195;;;-1:-1:-1;;;;;;;22790:32:1;;;;22785:2;22770:18;;22763:60;-1:-1:-1;;;22854:3:1;22839:19;22832:35;22751:3;22161:712;-1:-1:-1;;;22161:712:1:o;22878:184::-;23050:4;23038:17;;;;23020:36;;23008:2;22993:18;;22975:87::o;23067:128::-;;23138:1;23134:6;23131:1;23128:13;23125:2;;;23144:18;;:::i;:::-;-1:-1:-1;23180:9:1;;23115:80::o;23200:217::-;;23266:1;23256:2;;-1:-1:-1;;;23291:31:1;;23345:4;23342:1;23335:15;23373:4;23298:1;23363:15;23256:2;-1:-1:-1;23402:9:1;;23246:171::o;23422:168::-;;23528:1;23524;23520:6;23516:14;23513:1;23510:21;23505:1;23498:9;23491:17;23487:45;23484:2;;;23535:18;;:::i;:::-;-1:-1:-1;23575:9:1;;23474:116::o;23595:125::-;;23663:1;23660;23657:8;23654:2;;;23668:18;;:::i;:::-;-1:-1:-1;23705:9:1;;23644:76::o;23725:136::-;;23792:5;23782:2;;23801:18;;:::i;:::-;-1:-1:-1;;;23837:18:1;;23772:89::o;23866:380::-;23951:1;23941:12;;23998:1;23988:12;;;24009:2;;24063:4;24055:6;24051:17;24041:27;;24009:2;24116;24108:6;24105:14;24085:18;24082:38;24079:2;;;24162:10;24157:3;24153:20;24150:1;24143:31;24197:4;24194:1;24187:15;24225:4;24222:1;24215:15;24079:2;;23921:325;;;:::o;24251:135::-;;-1:-1:-1;;24311:17:1;;24308:2;;;24331:18;;:::i;:::-;-1:-1:-1;24378:1:1;24367:13;;24298:88::o;24391:127::-;24452:10;24447:3;24443:20;24440:1;24433:31;24483:4;24480:1;24473:15;24507:4;24504:1;24497:15;24523:127;24584:10;24579:3;24575:20;24572:1;24565:31;24615:4;24612:1;24605:15;24639:4;24636:1;24629:15;24655:133;-1:-1:-1;;;;;24732:31:1;;24722:42;;24712:2;;24778:1;24775;24768:12;24793:120;24881:5;24874:13;24867:21;24860:5;24857:32;24847:2;;24903:1;24900;24893:12

Swarm Source

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