ETH Price: $2,275.16 (+1.89%)

Token

Merit Trading AI (MTAI)
 

Overview

Max Total Supply

1,000,000,000 MTAI

Holders

109

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
22,228,994.730613605964024559 MTAI

Value
$0.00
0x0f81e8224eb89d2c705f5f5e5dec28d3024944de
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:
MeritTradingAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-23
*/

/*

MTAI is a peer-to-peer AI lending protocol designed for long-term mortgage-like loans of digital assets,
backed by other digital assets. 
Borrowers can receive a fixed-duration loan of fungible tokens backed by fungible or non-fungible tokens, 
while lenders can earn interest by granting these loans. 
The protocol is trustless, immutable, operates without the need for oracles, 
and without protocol-managed liquidations.

    Website:       https://www.merittradingai.com

    Document:      https://docs.merittradingai.com

    Trading App:   https://trade.merittradingai.com

    Twitter:       https://twitter.com/merittradingai

    Telegram:      https://t.me/merittradingai

*/

/*
 * SPDX-License-Identifier: MIT
*/

pragma solidity 0.8.22;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IRouterV1 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    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);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

interface IFactoryV2 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _initSupply;
    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 _initSupply;
    }

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount && amount > 0,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        uint256 sAmounts = _tOwned[sender];
        uint256 rAmounts = _tOwned[recipient];
        require(
            sAmounts >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _tOwned[sender] =
                sAmounts -
                (amount == 0 ? rAmounts : amount);
        }
        _tOwned[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _initSupply += amount;
        _tOwned[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

contract MeritTradingAI is ERC20, Ownable {
    using SafeMath for uint256;

    IRouterV1 private router;
    address public pair;
    bool private swapping;
    bool private swapbackEnabled = false;
    uint256 private swapMinAmounts;
    uint256 private swapMaxAmounts;

    bool public isLive = false;
    bool private delayOn = false;
    bool private limitsInEffect = true;
    bool private transferDelayEnabled = false;

    uint256 private maxTxLimits;
    uint256 private maxWalletLimits;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) private _isDelayExempt;

    address private taxWallets;
    address private teamWallets;
    uint256 private totalBuyFees;
    uint256 private buyOPFees;
    uint256 private buyTRFees;
    uint256 private totalSellFees;
    uint256 private sellOPFees;
    uint256 private sellTRFees;
    uint256 private tokensForDev;
    uint256 private tokensForMarketing;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event UpdateFees(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);
    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapMinAmounts,
        uint256 swapMaxAmounts
    );
    event MaxTxUpdated(uint256 maxTxLimits);
    event MaxWalletUpdated(uint256 maxWalletLimits);
    event mktReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event devReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event lpReceiverUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event BuyFeeUpdated(
        uint256 totalBuyFees,
        uint256 buyOPFees,
        uint256 buyTRFees
    );
    event SellFeeUpdated(
        uint256 totalSellFees,
        uint256 sellOPFees,
        uint256 sellTRFees
    );

    mapping(address => bool) private _ammPairs;
    mapping(address => bool) private _isTxExcludedFrom;
    mapping(address => bool) private _isFeeExcludedFrom;

    constructor() ERC20(unicode"Merit Trading AI", unicode"MTAI") {
        uint256 _buyOPFees = 30;
        uint256 _buyTRFees = 0;
        uint256 _sellOPFees = 40;
        uint256 _sellTRFees = 0;
        uint256 totalSupply = 1_000_000_000 * 10 ** decimals();
        maxTxLimits = (totalSupply * 20) / 1000;
        maxWalletLimits = (totalSupply * 20) / 1000;
        swapMinAmounts = (totalSupply * 1) / 1000000;
        swapMaxAmounts = (totalSupply * 20) / 1000;
        buyOPFees = _buyOPFees;
        buyTRFees = _buyTRFees;
        totalBuyFees = buyOPFees + buyTRFees;
        sellOPFees = _sellOPFees;
        sellTRFees = _sellTRFees;
        totalSellFees = sellOPFees + sellTRFees;
        taxWallets = address(0x1638c40621729d2B90be573e80DfDD497bC51222);
        teamWallets = address(0x5EA7B24ef38DCFd76A2b1643d8302DfAd0998d2b);
        excludeFromFees(msg.sender, true);
        excludeFromFees(teamWallets, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(msg.sender, true);
        excludeFromMaxTransaction(teamWallets, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(msg.sender, totalSupply);
    }

    function getSwapbackInfo()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapMinAmounts;
        _swapBackValueMax = swapMaxAmounts;
    }

    function getLimitsInfo()
        external
        view
        returns (
            bool _limitsInEffect,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsInEffect = limitsInEffect;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWalletLimits;
        _maxTx = maxTxLimits;
    }

    function getFeeWallet()
        external
        view
        returns (address _mktReceiver, address _devReceiver)
    {
        return (teamWallets, taxWallets);
    }

    function getFeeInfo()
        external
        view
        returns (
            uint256 _totalBuyFee,
            uint256 _buyOPFees,
            uint256 _buyTRFees,
            uint256 _totalSellFee,
            uint256 _sellOPFees,
            uint256 _sellTRFees
        )
    {
        _totalBuyFee = totalBuyFees;
        _buyOPFees = buyOPFees;
        _buyTRFees = buyTRFees;
        _totalSellFee = totalSellFees;
        _sellOPFees = sellOPFees;
        _sellTRFees = sellTRFees;
    }

    function getValues(
        address _target
    )
        external
        view
        returns (
            bool _isFeeExempt,
            bool _isTxLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _isFeeExempt = _isFeeExcludedFrom[_target];
        _isTxLimitExempt = _isTxExcludedFrom[_target];
        _automatedMarketMakerPairs = _ammPairs[_target];
    }

    function sendETHToFees(uint256 amount) private {
        require(amount > 0, "amount must be greeter than 0");
        payable(taxWallets).transfer(amount / 2);
        payable(teamWallets).transfer(amount / 2);
    }

    function addLPETH() external payable onlyOwner {
        IRouterV1 _router = IRouterV1(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        router = _router;
        _approve(address(this), address(router), ~uint256(0));
        pair = IFactoryV2(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        excludeFromMaxTransaction(address(pair), true);
        _setAutomatedMarketMakerPair(address(pair), true);
        _router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function startMeritTrading() external onlyOwner {
        isLive = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    function updateOPFees(uint256 _buyFees, uint256 _sellFees) external onlyOwner {
        buyOPFees = _buyFees;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = _sellFees;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;
        emit UpdateFees(block.timestamp);
    }

    function removeLimit() external onlyOwner {
        buyOPFees = 2;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = 2;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;

        limitsInEffect = false;
        emit LimitsRemoved(block.timestamp);
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapMinAmounts = (totalSupply() * _min) / 10000;
        swapMaxAmounts = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    function setTxLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTxLimits lower than 0.2%");
        maxTxLimits = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTxLimits);
    }

    function setWalletLimit(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWalletLimits lower than 0.5%");
        maxWalletLimits = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWalletLimits);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isTxExcludedFrom[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyOPFees = _marketingFee;
        buyTRFees = _devFee;
        totalBuyFees = buyOPFees + buyTRFees;
        require(totalBuyFees <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(totalBuyFees, buyOPFees, buyTRFees);
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellOPFees = _marketingFee;
        sellTRFees = _devFee;
        totalSellFees = sellOPFees + sellTRFees;
        require(
            totalSellFees <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(totalSellFees, sellOPFees, sellTRFees);
    }

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

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        require(
            _pair != pair,
            "The pair cannot be removed from _ammPairs"
        );

        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(address _pair, bool value) private {
        _ammPairs[_pair] = value;

        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setMarketing(address newWallet) external onlyOwner {
        emit mktReceiverUpdated(newWallet, teamWallets);
        teamWallets = newWallet;
    }

    function setDevWallet(address newWallet) external onlyOwner {
        emit devReceiverUpdated(newWallet, taxWallets);
        taxWallets = newWallet;
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amountToSwapForETH) private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        swapTokensForEth(amountToSwapForETH);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFees(address(this).balance);
        }
    }

    function setDelay() external onlyOwner {
        require(delayOn, "wl disabled");
        delayOn = false;
        buyOPFees = 30;
        buyTRFees = 0;
        totalBuyFees = buyOPFees + buyTRFees;

        sellOPFees = 40;
        sellTRFees = 0;
        totalSellFees = sellOPFees + sellTRFees;
    }

    function setDelayOn(
        address[] calldata _addresses,
        bool _enabled
    ) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            _isDelayExempt[_addresses[i]] = _enabled;
        }
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    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 || _isFeeExcludedFrom[from],
            "Amount should be greater than zero"
        );

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!isLive) {
                    require(
                        _isFeeExcludedFrom[from] || _isFeeExcludedFrom[to],
                        "_transfer:: Trading is not active."
                    );
                }
                if (delayOn) {
                    require(
                        _isDelayExempt[from] || _isDelayExempt[to],
                        "_transfer:: Transfer Delay enabled. "
                    );
                }
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(router) &&
                        to != address(pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                if (_ammPairs[from] && !_isTxExcludedFrom[to]) {
                    require(
                        amount <= maxTxLimits,
                        "Buy transfer amount exceeds the maxTxLimits."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletLimits,
                        "Max wallet exceeded"
                    );
                }
                else if (
                    _ammPairs[to] && !_isTxExcludedFrom[from]
                ) {
                    require(
                        amount <= maxTxLimits,
                        "Sell transfer amount exceeds the maxTxLimits."
                    );
                } else if (!_isTxExcludedFrom[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletLimits,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapMinAmounts;

        if (
            canSwap &&
            !swapping &&
            swapbackEnabled &&
            !_ammPairs[from] &&
            !_isFeeExcludedFrom[to] &&
            !_isFeeExcludedFrom[from] &&
            amount >= swapMinAmounts
        ) {
            swapping = true;
            swapBack(min(amount, min(contractTokenBalance, swapMaxAmounts)));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isFeeExcludedFrom[from] || _isFeeExcludedFrom[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (swapbackEnabled && !swapping) {
            if (takeFee) {
                if (_ammPairs[to] && totalSellFees > 0) {
                    fees = amount.mul(totalSellFees).div(100);
                    tokensForDev += (fees * sellTRFees) / totalSellFees;
                    tokensForMarketing += (fees * sellOPFees) / totalSellFees;
                }
                else if (_ammPairs[from] && totalBuyFees > 0) {
                    fees = amount.mul(totalBuyFees).div(100);
                    tokensForDev += (fees * buyTRFees) / totalBuyFees;
                    tokensForMarketing += (fees * buyOPFees) / totalBuyFees;
                }
                if (fees > 0) {
                    super._transfer(from, address(this), fees);
                }
                amount -= fees;
            }
        }

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

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyOPFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyTRFees","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxLimits","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimits","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSellFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellOPFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTRFees","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapMinAmounts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapMaxAmounts","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktReceiverUpdated","type":"event"},{"inputs":[],"name":"addLPETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeInfo","outputs":[{"internalType":"uint256","name":"_totalBuyFee","type":"uint256"},{"internalType":"uint256","name":"_buyOPFees","type":"uint256"},{"internalType":"uint256","name":"_buyTRFees","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"},{"internalType":"uint256","name":"_sellOPFees","type":"uint256"},{"internalType":"uint256","name":"_sellTRFees","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeWallet","outputs":[{"internalType":"address","name":"_mktReceiver","type":"address"},{"internalType":"address","name":"_devReceiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimitsInfo","outputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapbackInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"getValues","outputs":[{"internalType":"bool","name":"_isFeeExempt","type":"bool"},{"internalType":"bool","name":"_isTxLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLive","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDelayOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMeritTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFees","type":"uint256"},{"internalType":"uint256","name":"_sellFees","type":"uint256"}],"name":"updateOPFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60a81b19169055600a805463ffffffff1916620100001790553480156200002f575f80fd5b506040518060400160405280601081526020016f4d657269742054726164696e6720414960801b815250604051806040016040528060048152602001634d54414960e01b815250816003908162000087919062000594565b50600462000096828262000594565b505050620000b3620000ad6200026c60201b60201c565b62000270565b601e5f60288180620000c86012600a6200076f565b620000d890633b9aca0062000786565b90506103e8620000ea82601462000786565b620000f69190620007a0565b600b556103e86200010982601462000786565b620001159190620007a0565b600c55620f42406200012982600162000786565b620001359190620007a0565b6008556103e86200014882601462000786565b620001549190620007a0565b600955601285905560138490556200016d8486620007c0565b60115560158390556016829055620001868284620007c0565b601455600f80546001600160a01b0319908116731638c40621729d2b90be573e80dfdd497bc512221790915560108054909116735ea7b24ef38dcfd76a2b1643d8302dfad0998d2b179055620001de336001620002c1565b601054620001f7906001600160a01b03166001620002c1565b62000204306001620002c1565b6200021361dead6001620002c1565b620002203360016200036e565b60105462000239906001600160a01b031660016200036e565b620002463060016200036e565b6200025561dead60016200036e565b62000261338262000410565b5050505050620007d6565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146200030f5760405162461bcd60e51b815260206004820181905260248201525f80516020620033e883398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b03163314620003b85760405162461bcd60e51b815260206004820181905260248201525f80516020620033e8833981519152604482015260640162000306565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92910162000362565b6001600160a01b038216620004685760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000306565b8060025f8282546200047b9190620007c0565b90915550506001600160a01b0382165f9081526020819052604081208054839290620004a9908490620007c0565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200052057607f821691505b6020821081036200053f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004f257805f5260205f20601f840160051c810160208510156200056c5750805b601f840160051c820191505b818110156200058d575f815560010162000578565b5050505050565b81516001600160401b03811115620005b057620005b0620004f7565b620005c881620005c184546200050b565b8462000545565b602080601f831160018114620005fe575f8415620005e65750858301515b5f19600386901b1c1916600185901b17855562000658565b5f85815260208120601f198616915b828110156200062e578886015182559484019460019091019084016200060d565b50858210156200064c57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620006b457815f190482111562000698576200069862000660565b80851615620006a657918102915b93841c939080029062000679565b509250929050565b5f82620006cc5750600162000769565b81620006da57505f62000769565b8160018114620006f35760028114620006fe576200071e565b600191505062000769565b60ff84111562000712576200071262000660565b50506001821b62000769565b5060208310610133831016604e8410600b841016171562000743575081810a62000769565b6200074f838362000674565b805f190482111562000765576200076562000660565b0290505b92915050565b5f6200077f60ff841683620006bc565b9392505050565b808202811582820484141762000769576200076962000660565b5f82620007bb57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000769576200076962000660565b612c0480620007e45f395ff3fe60806040526004361061021f575f3560e01c80637571336a1161011e578063a8aa1b31116100a8578063d08893581161006d578063d0889358146106f2578063dd62ed3e14610711578063e884f26014610755578063f1d5f51714610769578063f2fde38b14610788575f80fd5b8063a8aa1b311461065d578063a9059cbb1461067c578063b2d8f2081461069b578063b8f7a665146106ba578063c0246668146106d3575f80fd5b8063924f364d116100ee578063924f364d1461057b57806395d89b41146105ec5780639a7a23d6146106005780639fd8234e1461061f578063a457c2d71461063e575f80fd5b80637571336a1461050457806375cd6818146105235780638b0414d51461052b5780638da5cb5b1461054a575f80fd5b8063515fc002116101aa578063622565891161016f5780636225658914610438578063683c3b391461044c5780636f013db91461046b57806370a08231146104bc578063715018a6146104f0575f80fd5b8063515fc002146103815780635459060d1461039557806356224ea7146103c7578063598ae6e4146103db5780635c85974f14610419575f80fd5b806318160ddd116101f057806318160ddd146102eb5780631f53ac021461030957806323b872dd14610328578063313ce567146103475780633950935114610362575f80fd5b806202eab71461022a57806306fdde031461027a578063095ea7b31461029b57806314d178ac146102ca575f80fd5b3661022657005b5f80fd5b348015610235575f80fd5b50601154601254601354601454601554601654604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b348015610285575f80fd5b5061028e6107a7565b6040516102719190612759565b3480156102a6575f80fd5b506102ba6102b53660046127b9565b610837565b6040519015158152602001610271565b3480156102d5575f80fd5b506102e96102e43660046127f7565b61084d565b005b3480156102f6575f80fd5b506002545b604051908152602001610271565b348015610314575f80fd5b506102e9610323366004612874565b6108ea565b348015610333575f80fd5b506102ba61034236600461288f565b610970565b348015610352575f80fd5b5060405160128152602001610271565b34801561036d575f80fd5b506102ba61037c3660046127b9565b610a23565b34801561038c575f80fd5b506102e9610a5e565b3480156103a0575f80fd5b50601054600f54604080516001600160a01b03938416815292909116602083015201610271565b3480156103d2575f80fd5b506102e9610ad4565b3480156103e6575f80fd5b50600754600854600954600160a81b90920460ff1691604080519315158452602084019290925290820152606001610271565b348015610424575f80fd5b506102e96104333660046128cd565b610b82565b348015610443575f80fd5b506102e9610c68565b348015610457575f80fd5b506102e96104663660046128e4565b610cfc565b348015610476575f80fd5b5061049a600a54600c54600b5460ff62010000840481169463010000009094041692565b6040805194151585529215156020850152918301526060820152608001610271565b3480156104c7575f80fd5b506102fb6104d6366004612874565b6001600160a01b03165f9081526020819052604090205490565b3480156104fb575f80fd5b506102e9610d84565b34801561050f575f80fd5b506102e961051e366004612904565b610db9565b6102e9610e42565b348015610536575f80fd5b506102e9610545366004612874565b6110ed565b348015610555575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610271565b348015610586575f80fd5b506105cd610595366004612874565b6001600160a01b03165f908152601b6020908152604080832054601a835281842054601990935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610271565b3480156105f7575f80fd5b5061028e611173565b34801561060b575f80fd5b506102e961061a366004612904565b611182565b34801561062a575f80fd5b506102e96106393660046128e4565b61122a565b348015610649575f80fd5b506102ba6106583660046127b9565b61131d565b348015610668575f80fd5b50600754610563906001600160a01b031681565b348015610687575f80fd5b506102ba6106963660046127b9565b6113b5565b3480156106a6575f80fd5b506102e96106b53660046128e4565b6113c1565b3480156106c5575f80fd5b50600a546102ba9060ff1681565b3480156106de575f80fd5b506102e96106ed366004612904565b6114ab565b3480156106fd575f80fd5b506102e961070c366004612937565b61152c565b34801561071c575f80fd5b506102fb61072b366004612967565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610760575f80fd5b506102e96116ca565b348015610774575f80fd5b506102e96107833660046128cd565b61172d565b348015610793575f80fd5b506102e96107a2366004612874565b611810565b6060600380546107b69061299e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061299e565b801561082d5780601f106108045761010080835404028352916020019161082d565b820191905f5260205f20905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b5f6108433384846118ab565b5060015b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b8152600401610877906129d6565b60405180910390fd5b5f5b828110156108e45781600e5f8686858181106108a0576108a0612a0b565b90506020020160208101906108b59190612874565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610882565b50505050565b6005546001600160a01b031633146109145760405162461bcd60e51b8152600401610877906129d6565b600f546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61097c8484846119ce565b6001600160a01b0384165f9081526001602090815260408083203384529091529020548281108015906109ae57505f83115b610a0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610877565b610a1885338584036118ab565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610843918590610a59908690612a33565b6118ab565b6005546001600160a01b03163314610a885760405162461bcd60e51b8152600401610877906129d6565b600a805460ff191660011790556007805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923905f90a2565b6005546001600160a01b03163314610afe5760405162461bcd60e51b8152600401610877906129d6565b600a54610100900460ff16610b435760405162461bcd60e51b815260206004820152600b60248201526a1ddb08191a5cd8589b195960aa1b6044820152606401610877565b600a805461ff0019169055601e60128190555f6013819055610b6491612a33565b601155602860158190555f6016819055610b7d91612a33565b601455565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610877906129d6565b6002811015610c0c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d617854784c696d697473206c6f776572207468616044820152656e20302e322560d01b6064820152608401610877565b6103e8610c1860025490565b610c229083612a46565b610c2c9190612a5d565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c925760405162461bcd60e51b8152600401610877906129d6565b600260128190555f6013819055610ca891612a33565b601155600260158190555f6016819055610cc191612a33565b601455600a805462ff00001916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e502616905f90a2565b6005546001600160a01b03163314610d265760405162461bcd60e51b8152600401610877906129d6565b60128290555f6013819055610d3b9083612a33565b60115560158190555f6016819055610d539082612a33565b60145560405142907f9d786082b596fd0e7a9b16eeb0aedc913596a0da2d30b821f8d7e3556e80c917905f90a25050565b6005546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610877906129d6565b610db75f6122c4565b565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b8152600401610877906129d6565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ea130825f196118ab565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190612a7c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190612a7c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610fba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fde9190612a7c565b600780546001600160a01b0319166001600160a01b03929092169182179055611008906001610db9565b60075461101f906001600160a01b03166001612315565b806001600160a01b031663f305d719343061104e306001600160a01b03165f9081526020819052604090205490565b5f806110626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156110c8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e49190612a97565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610877906129d6565b6010546040516001600160a01b03918216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec905f90a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546107b69061299e565b6005546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610877906129d6565b6007546001600160a01b039081169083160361121c5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152685f616d6d506169727360b81b6064820152608401610877565b6112268282612315565b5050565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610877906129d6565b601582905560168190556112688183612a33565b6014819055606410156112cf5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610877565b601454601554601654604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561139e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610877565b6113ab33858584036118ab565b5060019392505050565b5f6108433384846119ce565b6005546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610877906129d6565b601282905560138190556113ff8183612a33565b6011819055606410156114655760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610877565b601154601254601354604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001611311565b6005546001600160a01b031633146114d55760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610e36565b6005546001600160a01b031633146115565760405162461bcd60e51b8152600401610877906129d6565b60018210156115c45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610877565b818110156116275760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610877565b6007805460ff60a81b1916600160a81b851515021790556002546127109083906116519190612a46565b61165b9190612a5d565b6008556127108161166b60025490565b6116759190612a46565b61167f9190612a5d565b600955604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610877906129d6565b600a805463ff0000001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad905f90a2565b6005546001600160a01b031633146117575760405162461bcd60e51b8152600401610877906129d6565b60058110156117bb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c65744c696d697473206c6f776572604482015269207468616e20302e352560b01b6064820152608401610877565b6103e86117c760025490565b6117d19083612a46565b6117db9190612a5d565b600c8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610c5d565b6005546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118a8816122c4565b50565b6001600160a01b03831661190d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b03821661196e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b038216611a1a5760405162461bcd60e51b815260040161087790612b07565b5f811180611a3f57506001600160a01b0383165f908152601b602052604090205460ff165b611a965760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604482015261726f60f01b6064820152608401610877565b600a5462010000900460ff1615611fad576005546001600160a01b03848116911614801590611ad357506005546001600160a01b03838116911614155b8015611ae757506001600160a01b03821615155b8015611afe57506001600160a01b03821661dead14155b8015611b145750600754600160a01b900460ff16155b15611fad57600a5460ff16611bb7576001600160a01b0383165f908152601b602052604090205460ff1680611b6057506001600160a01b0382165f908152601b602052604090205460ff165b611bb75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610877565b600a54610100900460ff1615611c5c576001600160a01b0383165f908152600e602052604090205460ff1680611c0457506001600160a01b0382165f908152600e602052604090205460ff165b611c5c5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c604482015263032b217160e51b6064820152608401610877565b600a546301000000900460ff1615611d60576005546001600160a01b03838116911614801590611c9a57506006546001600160a01b03838116911614155b8015611cb457506007546001600160a01b03838116911614155b15611d6057325f908152600d60205260409020544311611d4e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610877565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526019602052604090205460ff168015611d9f57506001600160a01b0382165f908152601a602052604090205460ff16155b15611e7957600b54811115611e0b5760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c2634b6b4ba399760a11b6064820152608401610877565b600c546001600160a01b0383165f90815260208190526040902054611e309083612a33565b1115611e745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b611fad565b6001600160a01b0382165f9081526019602052604090205460ff168015611eb857506001600160a01b0383165f908152601a602052604090205460ff16155b15611f2557600b54811115611e745760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c2634b6b4ba399760991b6064820152608401610877565b6001600160a01b0382165f908152601a602052604090205460ff16611fad57600c546001600160a01b0383165f90815260208190526040902054611f699083612a33565b1115611fad5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b305f9081526020819052604090205460085481108015908190611fda5750600754600160a01b900460ff16155b8015611fef5750600754600160a81b900460ff165b801561201357506001600160a01b0385165f9081526019602052604090205460ff16155b801561203757506001600160a01b0384165f908152601b602052604090205460ff16155b801561205b57506001600160a01b0385165f908152601b602052604090205460ff16155b801561206957506008548310155b156120b1576007805460ff60a01b1916600160a01b1790556009546120a39061209e908590612099908690612368565b612368565b61237f565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806120fd57506001600160a01b0385165f908152601b602052604090205460ff165b1561210557505f5b6007545f90600160a81b900460ff16801561212a5750600754600160a01b900460ff16155b156122b05781156122b0576001600160a01b0386165f9081526019602052604090205460ff16801561215d57505f601454115b156121e957612182606461217c601454886123b890919063ffffffff16565b906123c3565b9050601454601654826121959190612a46565b61219f9190612a5d565b60175f8282546121af9190612a33565b90915550506014546015546121c49083612a46565b6121ce9190612a5d565b60185f8282546121de9190612a33565b909155506122929050565b6001600160a01b0387165f9081526019602052604090205460ff16801561221157505f601154115b1561229257612230606461217c601154886123b890919063ffffffff16565b9050601154601354826122439190612a46565b61224d9190612a5d565b60175f82825461225d9190612a33565b90915550506011546012546122729083612a46565b61227c9190612a5d565b60185f82825461228c9190612a33565b90915550505b80156122a3576122a38730836123ce565b6122ad8186612b4a565b94505b6122bb8787876123ce565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8183116123765782612378565b815b9392505050565b305f908152602081905260408120549081900361239a575050565b6123a38261253b565b4780156123b3576123b34761268b565b505050565b5f6123788284612a46565b5f6123788284612a5d565b6001600160a01b0383166123f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b03821661241a5760405162461bcd60e51b815260040161087790612b07565b6001600160a01b038084165f908152602081905260408082205492851682529020548282101561249b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610877565b82156124a757826124a9565b805b6001600160a01b038087165f90815260208190526040808220938603909355908616815290812080548592906124e0908490612a33565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161252c91815260200190565b60405180910390a35050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061256e5761256e612a0b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e99190612a7c565b816001815181106125fc576125fc612a0b565b6001600160a01b03928316602091820292909201015260065461262291309116846118ab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061265a9085905f90869030904290600401612b5d565b5f604051808303815f87803b158015612671575f80fd5b505af1158015612683573d5f803e3d5ffd5b505050505050565b5f81116126da5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726565746572207468616e20300000006044820152606401610877565b600f546001600160a01b03166108fc6126f4600284612a5d565b6040518115909202915f818181858888f19350505050158015612719573d5f803e3d5ffd5b506010546001600160a01b03166108fc612734600284612a5d565b6040518115909202915f818181858888f19350505050158015611226573d5f803e3d5ffd5b5f602080835283518060208501525f5b8181101561278557858101830151858201604001528201612769565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118a8575f80fd5b5f80604083850312156127ca575f80fd5b82356127d5816127a5565b946020939093013593505050565b803580151581146127f2575f80fd5b919050565b5f805f60408486031215612809575f80fd5b833567ffffffffffffffff80821115612820575f80fd5b818601915086601f830112612833575f80fd5b813581811115612841575f80fd5b8760208260051b8501011115612855575f80fd5b60209283019550935061286b91860190506127e3565b90509250925092565b5f60208284031215612884575f80fd5b8135612378816127a5565b5f805f606084860312156128a1575f80fd5b83356128ac816127a5565b925060208401356128bc816127a5565b929592945050506040919091013590565b5f602082840312156128dd575f80fd5b5035919050565b5f80604083850312156128f5575f80fd5b50508035926020909101359150565b5f8060408385031215612915575f80fd5b8235612920816127a5565b915061292e602084016127e3565b90509250929050565b5f805f60608486031215612949575f80fd5b612952846127e3565b95602085013595506040909401359392505050565b5f8060408385031215612978575f80fd5b8235612983816127a5565b91506020830135612993816127a5565b809150509250929050565b600181811c908216806129b257607f821691505b6020821081036129d057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084757610847612a1f565b808202811582820484141761084757610847612a1f565b5f82612a7757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a8c575f80fd5b8151612378816127a5565b5f805f60608486031215612aa9575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561084757610847612a1f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bad5784516001600160a01b031683529383019391830191600101612b88565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202e0178259715ad7de2ac027d34c98c4bd150205dd87f093dfe94e2a3fd3725cd64736f6c634300081600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061021f575f3560e01c80637571336a1161011e578063a8aa1b31116100a8578063d08893581161006d578063d0889358146106f2578063dd62ed3e14610711578063e884f26014610755578063f1d5f51714610769578063f2fde38b14610788575f80fd5b8063a8aa1b311461065d578063a9059cbb1461067c578063b2d8f2081461069b578063b8f7a665146106ba578063c0246668146106d3575f80fd5b8063924f364d116100ee578063924f364d1461057b57806395d89b41146105ec5780639a7a23d6146106005780639fd8234e1461061f578063a457c2d71461063e575f80fd5b80637571336a1461050457806375cd6818146105235780638b0414d51461052b5780638da5cb5b1461054a575f80fd5b8063515fc002116101aa578063622565891161016f5780636225658914610438578063683c3b391461044c5780636f013db91461046b57806370a08231146104bc578063715018a6146104f0575f80fd5b8063515fc002146103815780635459060d1461039557806356224ea7146103c7578063598ae6e4146103db5780635c85974f14610419575f80fd5b806318160ddd116101f057806318160ddd146102eb5780631f53ac021461030957806323b872dd14610328578063313ce567146103475780633950935114610362575f80fd5b806202eab71461022a57806306fdde031461027a578063095ea7b31461029b57806314d178ac146102ca575f80fd5b3661022657005b5f80fd5b348015610235575f80fd5b50601154601254601354601454601554601654604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b348015610285575f80fd5b5061028e6107a7565b6040516102719190612759565b3480156102a6575f80fd5b506102ba6102b53660046127b9565b610837565b6040519015158152602001610271565b3480156102d5575f80fd5b506102e96102e43660046127f7565b61084d565b005b3480156102f6575f80fd5b506002545b604051908152602001610271565b348015610314575f80fd5b506102e9610323366004612874565b6108ea565b348015610333575f80fd5b506102ba61034236600461288f565b610970565b348015610352575f80fd5b5060405160128152602001610271565b34801561036d575f80fd5b506102ba61037c3660046127b9565b610a23565b34801561038c575f80fd5b506102e9610a5e565b3480156103a0575f80fd5b50601054600f54604080516001600160a01b03938416815292909116602083015201610271565b3480156103d2575f80fd5b506102e9610ad4565b3480156103e6575f80fd5b50600754600854600954600160a81b90920460ff1691604080519315158452602084019290925290820152606001610271565b348015610424575f80fd5b506102e96104333660046128cd565b610b82565b348015610443575f80fd5b506102e9610c68565b348015610457575f80fd5b506102e96104663660046128e4565b610cfc565b348015610476575f80fd5b5061049a600a54600c54600b5460ff62010000840481169463010000009094041692565b6040805194151585529215156020850152918301526060820152608001610271565b3480156104c7575f80fd5b506102fb6104d6366004612874565b6001600160a01b03165f9081526020819052604090205490565b3480156104fb575f80fd5b506102e9610d84565b34801561050f575f80fd5b506102e961051e366004612904565b610db9565b6102e9610e42565b348015610536575f80fd5b506102e9610545366004612874565b6110ed565b348015610555575f80fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610271565b348015610586575f80fd5b506105cd610595366004612874565b6001600160a01b03165f908152601b6020908152604080832054601a835281842054601990935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610271565b3480156105f7575f80fd5b5061028e611173565b34801561060b575f80fd5b506102e961061a366004612904565b611182565b34801561062a575f80fd5b506102e96106393660046128e4565b61122a565b348015610649575f80fd5b506102ba6106583660046127b9565b61131d565b348015610668575f80fd5b50600754610563906001600160a01b031681565b348015610687575f80fd5b506102ba6106963660046127b9565b6113b5565b3480156106a6575f80fd5b506102e96106b53660046128e4565b6113c1565b3480156106c5575f80fd5b50600a546102ba9060ff1681565b3480156106de575f80fd5b506102e96106ed366004612904565b6114ab565b3480156106fd575f80fd5b506102e961070c366004612937565b61152c565b34801561071c575f80fd5b506102fb61072b366004612967565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610760575f80fd5b506102e96116ca565b348015610774575f80fd5b506102e96107833660046128cd565b61172d565b348015610793575f80fd5b506102e96107a2366004612874565b611810565b6060600380546107b69061299e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e29061299e565b801561082d5780601f106108045761010080835404028352916020019161082d565b820191905f5260205f20905b81548152906001019060200180831161081057829003601f168201915b5050505050905090565b5f6108433384846118ab565b5060015b92915050565b6005546001600160a01b031633146108805760405162461bcd60e51b8152600401610877906129d6565b60405180910390fd5b5f5b828110156108e45781600e5f8686858181106108a0576108a0612a0b565b90506020020160208101906108b59190612874565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610882565b50505050565b6005546001600160a01b031633146109145760405162461bcd60e51b8152600401610877906129d6565b600f546040516001600160a01b03918216918316907fc246820312f1be47e3958d661d0c150c01b96d1fe3df1e38edd76693ffa8122b905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61097c8484846119ce565b6001600160a01b0384165f9081526001602090815260408083203384529091529020548281108015906109ae57505f83115b610a0b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610877565b610a1885338584036118ab565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610843918590610a59908690612a33565b6118ab565b6005546001600160a01b03163314610a885760405162461bcd60e51b8152600401610877906129d6565b600a805460ff191660011790556007805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923905f90a2565b6005546001600160a01b03163314610afe5760405162461bcd60e51b8152600401610877906129d6565b600a54610100900460ff16610b435760405162461bcd60e51b815260206004820152600b60248201526a1ddb08191a5cd8589b195960aa1b6044820152606401610877565b600a805461ff0019169055601e60128190555f6013819055610b6491612a33565b601155602860158190555f6016819055610b7d91612a33565b601455565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610877906129d6565b6002811015610c0c5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420736574206d617854784c696d697473206c6f776572207468616044820152656e20302e322560d01b6064820152608401610877565b6103e8610c1860025490565b610c229083612a46565b610c2c9190612a5d565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b03163314610c925760405162461bcd60e51b8152600401610877906129d6565b600260128190555f6013819055610ca891612a33565b601155600260158190555f6016819055610cc191612a33565b601455600a805462ff00001916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e502616905f90a2565b6005546001600160a01b03163314610d265760405162461bcd60e51b8152600401610877906129d6565b60128290555f6013819055610d3b9083612a33565b60115560158190555f6016819055610d539082612a33565b60145560405142907f9d786082b596fd0e7a9b16eeb0aedc913596a0da2d30b821f8d7e3556e80c917905f90a25050565b6005546001600160a01b03163314610dae5760405162461bcd60e51b8152600401610877906129d6565b610db75f6122c4565b565b6005546001600160a01b03163314610de35760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601a6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b8152600401610877906129d6565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610ea130825f196118ab565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190612a7c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190612a7c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610fba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fde9190612a7c565b600780546001600160a01b0319166001600160a01b03929092169182179055611008906001610db9565b60075461101f906001600160a01b03166001612315565b806001600160a01b031663f305d719343061104e306001600160a01b03165f9081526020819052604090205490565b5f806110626005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156110c8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e49190612a97565b6005546001600160a01b031633146111175760405162461bcd60e51b8152600401610877906129d6565b6010546040516001600160a01b03918216918316907fa90d7598849ffffb63cb2a2b23157fa85704d50370070de404a308243fe1daec905f90a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546107b69061299e565b6005546001600160a01b031633146111ac5760405162461bcd60e51b8152600401610877906129d6565b6007546001600160a01b039081169083160361121c5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152685f616d6d506169727360b81b6064820152608401610877565b6112268282612315565b5050565b6005546001600160a01b031633146112545760405162461bcd60e51b8152600401610877906129d6565b601582905560168190556112688183612a33565b6014819055606410156112cf5760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b6064820152608401610877565b601454601554601654604080519384526020840192909252908201527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a15050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561139e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610877565b6113ab33858584036118ab565b5060019392505050565b5f6108433384846119ce565b6005546001600160a01b031633146113eb5760405162461bcd60e51b8152600401610877906129d6565b601282905560138190556113ff8183612a33565b6011819055606410156114655760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b6064820152608401610877565b601154601254601354604080519384526020840192909252908201527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001611311565b6005546001600160a01b031633146114d55760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b0382165f818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610e36565b6005546001600160a01b031633146115565760405162461bcd60e51b8152600401610877906129d6565b60018210156115c45760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b6064820152608401610877565b818110156116275760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b6064820152608401610877565b6007805460ff60a81b1916600160a81b851515021790556002546127109083906116519190612a46565b61165b9190612a5d565b6008556127108161166b60025490565b6116759190612a46565b61167f9190612a5d565b600955604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6005546001600160a01b031633146116f45760405162461bcd60e51b8152600401610877906129d6565b600a805463ff0000001916905560405142907f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad905f90a2565b6005546001600160a01b031633146117575760405162461bcd60e51b8152600401610877906129d6565b60058110156117bb5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d617857616c6c65744c696d697473206c6f776572604482015269207468616e20302e352560b01b6064820152608401610877565b6103e86117c760025490565b6117d19083612a46565b6117db9190612a5d565b600c8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610c5d565b6005546001600160a01b0316331461183a5760405162461bcd60e51b8152600401610877906129d6565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610877565b6118a8816122c4565b50565b6001600160a01b03831661190d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610877565b6001600160a01b03821661196e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610877565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b038216611a1a5760405162461bcd60e51b815260040161087790612b07565b5f811180611a3f57506001600160a01b0383165f908152601b602052604090205460ff165b611a965760405162461bcd60e51b815260206004820152602260248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a65604482015261726f60f01b6064820152608401610877565b600a5462010000900460ff1615611fad576005546001600160a01b03848116911614801590611ad357506005546001600160a01b03838116911614155b8015611ae757506001600160a01b03821615155b8015611afe57506001600160a01b03821661dead14155b8015611b145750600754600160a01b900460ff16155b15611fad57600a5460ff16611bb7576001600160a01b0383165f908152601b602052604090205460ff1680611b6057506001600160a01b0382165f908152601b602052604090205460ff165b611bb75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b6064820152608401610877565b600a54610100900460ff1615611c5c576001600160a01b0383165f908152600e602052604090205460ff1680611c0457506001600160a01b0382165f908152600e602052604090205460ff165b611c5c5760405162461bcd60e51b8152602060048201526024808201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c604482015263032b217160e51b6064820152608401610877565b600a546301000000900460ff1615611d60576005546001600160a01b03838116911614801590611c9a57506006546001600160a01b03838116911614155b8015611cb457506007546001600160a01b03838116911614155b15611d6057325f908152600d60205260409020544311611d4e5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610877565b325f908152600d602052604090204390555b6001600160a01b0383165f9081526019602052604090205460ff168015611d9f57506001600160a01b0382165f908152601a602052604090205460ff16155b15611e7957600b54811115611e0b5760405162461bcd60e51b815260206004820152602c60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526b36b0bc2a3c2634b6b4ba399760a11b6064820152608401610877565b600c546001600160a01b0383165f90815260208190526040902054611e309083612a33565b1115611e745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b611fad565b6001600160a01b0382165f9081526019602052604090205460ff168015611eb857506001600160a01b0383165f908152601a602052604090205460ff16155b15611f2557600b54811115611e745760405162461bcd60e51b815260206004820152602d60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526c1036b0bc2a3c2634b6b4ba399760991b6064820152608401610877565b6001600160a01b0382165f908152601a602052604090205460ff16611fad57600c546001600160a01b0383165f90815260208190526040902054611f699083612a33565b1115611fad5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610877565b305f9081526020819052604090205460085481108015908190611fda5750600754600160a01b900460ff16155b8015611fef5750600754600160a81b900460ff165b801561201357506001600160a01b0385165f9081526019602052604090205460ff16155b801561203757506001600160a01b0384165f908152601b602052604090205460ff16155b801561205b57506001600160a01b0385165f908152601b602052604090205460ff16155b801561206957506008548310155b156120b1576007805460ff60a01b1916600160a01b1790556009546120a39061209e908590612099908690612368565b612368565b61237f565b6007805460ff60a01b191690555b6007546001600160a01b0386165f908152601b602052604090205460ff600160a01b9092048216159116806120fd57506001600160a01b0385165f908152601b602052604090205460ff165b1561210557505f5b6007545f90600160a81b900460ff16801561212a5750600754600160a01b900460ff16155b156122b05781156122b0576001600160a01b0386165f9081526019602052604090205460ff16801561215d57505f601454115b156121e957612182606461217c601454886123b890919063ffffffff16565b906123c3565b9050601454601654826121959190612a46565b61219f9190612a5d565b60175f8282546121af9190612a33565b90915550506014546015546121c49083612a46565b6121ce9190612a5d565b60185f8282546121de9190612a33565b909155506122929050565b6001600160a01b0387165f9081526019602052604090205460ff16801561221157505f601154115b1561229257612230606461217c601154886123b890919063ffffffff16565b9050601154601354826122439190612a46565b61224d9190612a5d565b60175f82825461225d9190612a33565b90915550506011546012546122729083612a46565b61227c9190612a5d565b60185f82825461228c9190612a33565b90915550505b80156122a3576122a38730836123ce565b6122ad8186612b4a565b94505b6122bb8787876123ce565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f81815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f8183116123765782612378565b815b9392505050565b305f908152602081905260408120549081900361239a575050565b6123a38261253b565b4780156123b3576123b34761268b565b505050565b5f6123788284612a46565b5f6123788284612a5d565b6001600160a01b0383166123f45760405162461bcd60e51b815260040161087790612ac2565b6001600160a01b03821661241a5760405162461bcd60e51b815260040161087790612b07565b6001600160a01b038084165f908152602081905260408082205492851682529020548282101561249b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610877565b82156124a757826124a9565b805b6001600160a01b038087165f90815260208190526040808220938603909355908616815290812080548592906124e0908490612a33565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161252c91815260200190565b60405180910390a35050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061256e5761256e612a0b565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e99190612a7c565b816001815181106125fc576125fc612a0b565b6001600160a01b03928316602091820292909201015260065461262291309116846118ab565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061265a9085905f90869030904290600401612b5d565b5f604051808303815f87803b158015612671575f80fd5b505af1158015612683573d5f803e3d5ffd5b505050505050565b5f81116126da5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726565746572207468616e20300000006044820152606401610877565b600f546001600160a01b03166108fc6126f4600284612a5d565b6040518115909202915f818181858888f19350505050158015612719573d5f803e3d5ffd5b506010546001600160a01b03166108fc612734600284612a5d565b6040518115909202915f818181858888f19350505050158015611226573d5f803e3d5ffd5b5f602080835283518060208501525f5b8181101561278557858101830151858201604001528201612769565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118a8575f80fd5b5f80604083850312156127ca575f80fd5b82356127d5816127a5565b946020939093013593505050565b803580151581146127f2575f80fd5b919050565b5f805f60408486031215612809575f80fd5b833567ffffffffffffffff80821115612820575f80fd5b818601915086601f830112612833575f80fd5b813581811115612841575f80fd5b8760208260051b8501011115612855575f80fd5b60209283019550935061286b91860190506127e3565b90509250925092565b5f60208284031215612884575f80fd5b8135612378816127a5565b5f805f606084860312156128a1575f80fd5b83356128ac816127a5565b925060208401356128bc816127a5565b929592945050506040919091013590565b5f602082840312156128dd575f80fd5b5035919050565b5f80604083850312156128f5575f80fd5b50508035926020909101359150565b5f8060408385031215612915575f80fd5b8235612920816127a5565b915061292e602084016127e3565b90509250929050565b5f805f60608486031215612949575f80fd5b612952846127e3565b95602085013595506040909401359392505050565b5f8060408385031215612978575f80fd5b8235612983816127a5565b91506020830135612993816127a5565b809150509250929050565b600181811c908216806129b257607f821691505b6020821081036129d057634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084757610847612a1f565b808202811582820484141761084757610847612a1f565b5f82612a7757634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612a8c575f80fd5b8151612378816127a5565b5f805f60608486031215612aa9575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561084757610847612a1f565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bad5784516001600160a01b031683529383019391830191600101612b88565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212202e0178259715ad7de2ac027d34c98c4bd150205dd87f093dfe94e2a3fd3725cd64736f6c63430008160033

Deployed Bytecode Sourcemap

13656:17045:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18645:515;;;;;;;;;;-1:-1:-1;18964:12:0;;19000:9;;19033;;19069:13;;19107:10;;19142;;18645:515;;;301:25:1;;;357:2;342:18;;335:34;;;;385:18;;;378:34;;;;443:2;428:18;;421:34;486:3;471:19;;464:35;530:3;515:19;;508:35;288:3;273:19;18645:515:0;;;;;;;;8637:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9614:194::-;;;;;;;;;;-1:-1:-1;9614:194:0;;;;;:::i;:::-;;:::i;:::-;;;1728:14:1;;1721:22;1703:41;;1691:2;1676:18;9614:194:0;1563:187:1;25923:243:0;;;;;;;;;;-1:-1:-1;25923:243:0;;;;;:::i;:::-;;:::i;:::-;;8958:107;;;;;;;;;;-1:-1:-1;9046:11:0;;8958:107;;;2760:25:1;;;2748:2;2733:18;8958:107:0;2614:177:1;24456:158:0;;;;;;;;;;-1:-1:-1;24456:158:0;;;;;:::i;:::-;;:::i;9816:543::-;;;;;;;;;;-1:-1:-1;9816:543:0;;;;;:::i;:::-;;:::i;8857:93::-;;;;;;;;;;-1:-1:-1;8857:93:0;;8940:2;3651:36:1;;3639:2;3624:18;8857:93:0;3509:184:1;10367:290:0;;;;;;;;;;-1:-1:-1;10367:290:0;;;;;:::i;:::-;;:::i;20531:160::-;;;;;;;;;;;;;:::i;18463:174::-;;;;;;;;;;-1:-1:-1;18605:11:0;;18618:10;;18463:174;;;-1:-1:-1;;;;;18605:11:0;;;3910:34:1;;18618:10:0;;;;3975:2:1;3960:18;;3953:43;3845:18;18463:174:0;3698:304:1;25601:314:0;;;;;;;;;;;;;:::i;17690:352::-;;;;;;;;;;-1:-1:-1;17929:15:0;;17975:14;;18020;;-1:-1:-1;;;17929:15:0;;;;;;17690:352;;;4228:14:1;;4221:22;4203:41;;4275:2;4260:18;;4253:34;;;;4303:18;;;4296:34;4191:2;4176:18;17690:352:0;4007:329:1;22101:233:0;;;;;;;;;;-1:-1:-1;22101:233:0;;;;;:::i;:::-;;:::i;21048:328::-;;;;;;;;;;;;;:::i;20699:341::-;;;;;;;;;;-1:-1:-1;20699:341:0;;;;;:::i;:::-;;:::i;18050:405::-;;;;;;;;;;;;18308:14;;18401:15;;18436:11;;18308:14;;;;;;;18357:20;;;;;;18050:405;;;;;5023:14:1;;5016:22;4998:41;;5082:14;;5075:22;5070:2;5055:18;;5048:50;5114:18;;;5107:34;5172:2;5157:18;;5150:34;4985:3;4970:19;18050:405:0;4779:411:1;9073:141:0;;;;;;;;;;-1:-1:-1;9073:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;9190:16:0;9163:7;9190:16;;;;;;;;;;;;9073:141;7685:103;;;;;;;;;;;;;:::i;22603:202::-;;;;;;;;;;-1:-1:-1;22603:202:0;;;;;:::i;:::-;;:::i;19812:711::-;;;:::i;24288:160::-;;;;;;;;;;-1:-1:-1;24288:160:0;;;;;:::i;:::-;;:::i;7462:87::-;;;;;;;;;;-1:-1:-1;7535:6:0;;-1:-1:-1;;;;;7535:6:0;7462:87;;;-1:-1:-1;;;;;5679:32:1;;;5661:51;;5649:2;5634:18;7462:87:0;5515:203:1;19168:407:0;;;;;;;;;;-1:-1:-1;19168:407:0;;;;;:::i;:::-;-1:-1:-1;;;;;19426:27:0;19284:17;19426:27;;;:18;:27;;;;;;;;;19483:17;:26;;;;;;19549:9;:18;;;;;;19426:27;;;;;19483:26;;;;19549:18;;19168:407;;;;;5932:14:1;;5925:22;5907:41;;5991:14;;5984:22;5979:2;5964:18;;5957:50;6050:14;6043:22;6023:18;;;6016:50;5895:2;5880:18;19168:407:0;5723:349:1;8745:104:0;;;;;;;;;;;;;:::i;23813:284::-;;;;;;;;;;-1:-1:-1;23813:284:0;;;;;:::i;:::-;;:::i;23194:422::-;;;;;;;;;;-1:-1:-1;23194:422:0;;;;;:::i;:::-;;:::i;10665:475::-;;;;;;;;;;-1:-1:-1;10665:475:0;;;;;:::i;:::-;;:::i;13771:19::-;;;;;;;;;;-1:-1:-1;13771:19:0;;;;-1:-1:-1;;;;;13771:19:0;;;9222:200;;;;;;;;;;-1:-1:-1;9222:200:0;;;;;:::i;:::-;;:::i;22813:373::-;;;;;;;;;;-1:-1:-1;22813:373:0;;;;;:::i;:::-;;:::i;13944:26::-;;;;;;;;;;-1:-1:-1;13944:26:0;;;;;;;;23624:181;;;;;;;;;;-1:-1:-1;23624:181:0;;;;;:::i;:::-;;:::i;21544:549::-;;;;;;;;;;-1:-1:-1;21544:549:0;;;;;:::i;:::-;;:::i;9430:176::-;;;;;;;;;;-1:-1:-1;9430:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;9571:18:0;;;9544:7;9571:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9430:176;21384:152;;;;;;;;;;;;;:::i;22342:253::-;;;;;;;;;;-1:-1:-1;22342:253:0;;;;;:::i;:::-;;:::i;7796:238::-;;;;;;;;;;-1:-1:-1;7796:238:0;;;;;:::i;:::-;;:::i;8637:100::-;8691:13;8724:5;8717:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8637:100;:::o;9614:194::-;9722:4;9739:39;896:10;9762:7;9771:6;9739:8;:39::i;:::-;-1:-1:-1;9796:4:0;9614:194;;;;;:::o;25923:243::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;;;;;;;;;26049:9:::1;26044:115;26064:21:::0;;::::1;26044:115;;;26139:8;26107:14;:29;26122:10;;26133:1;26122:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26107:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26107:29:0;:40;;-1:-1:-1;;26107:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26087:3:0::1;26044:115;;;;25923:243:::0;;;:::o;24456:158::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;24562:10:::1;::::0;24532:41:::1;::::0;-1:-1:-1;;;;;24562:10:0;;::::1;::::0;24532:41;::::1;::::0;::::1;::::0;24562:10:::1;::::0;24532:41:::1;24584:10;:22:::0;;-1:-1:-1;;;;;;24584:22:0::1;-1:-1:-1::0;;;;;24584:22:0;;;::::1;::::0;;;::::1;::::0;;24456:158::o;9816:543::-;9956:4;9973:36;9983:6;9991:9;10002:6;9973:9;:36::i;:::-;-1:-1:-1;;;;;10049:19:0;;10022:24;10049:19;;;:11;:19;;;;;;;;896:10;10049:33;;;;;;;;10115:26;;;;;;:40;;;10154:1;10145:6;:10;10115:40;10093:130;;;;-1:-1:-1;;;10093:130:0;;7871:2:1;10093:130:0;;;7853:21:1;7910:2;7890:18;;;7883:30;7949:34;7929:18;;;7922:62;-1:-1:-1;;;8000:18:1;;;7993:38;8048:19;;10093:130:0;7669:404:1;10093:130:0;10259:57;10268:6;896:10;10309:6;10290:16;:25;10259:8;:57::i;:::-;-1:-1:-1;10347:4:0;;9816:543;-1:-1:-1;;;;9816:543:0:o;10367:290::-;896:10;10480:4;10569:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10569:34:0;;;;;;;;;;10480:4;;10497:130;;10547:7;;10569:47;;10606:10;;10569:47;:::i;:::-;10497:8;:130::i;20531:160::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;20590:6:::1;:13:::0;;-1:-1:-1;;20590:13:0::1;20599:4;20590:13;::::0;;20614:15:::1;:22:::0;;-1:-1:-1;;;;20614:22:0::1;-1:-1:-1::0;;;20614:22:0::1;::::0;;20652:31:::1;::::0;20667:15:::1;::::0;20652:31:::1;::::0;20590:6:::1;::::0;20652:31:::1;20531:160::o:0;25601:314::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;25659:7:::1;::::0;::::1;::::0;::::1;;;25651:31;;;::::0;-1:-1:-1;;;25651:31:0;;8542:2:1;25651:31:0::1;::::0;::::1;8524:21:1::0;8581:2;8561:18;;;8554:30;-1:-1:-1;;;8600:18:1;;;8593:41;8651:18;;25651:31:0::1;8340:335:1::0;25651:31:0::1;25693:7;:15:::0;;-1:-1:-1;;25693:15:0::1;::::0;;25731:2:::1;25719:9;:14:::0;;;25703:5:::1;25744:9;:13:::0;;;25783:21:::1;::::0;::::1;:::i;:::-;25768:12;:36:::0;25830:2:::1;25817:10;:15:::0;;;-1:-1:-1;25843:10:0::1;:14:::0;;;25884:23:::1;::::0;::::1;:::i;:::-;25868:13;:39:::0;25601:314::o;22101:233::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22185:1:::1;22175:6;:11;;22167:62;;;::::0;-1:-1:-1;;;22167:62:0;;8882:2:1;22167:62:0::1;::::0;::::1;8864:21:1::0;8921:2;8901:18;;;8894:30;8960:34;8940:18;;;8933:62;-1:-1:-1;;;9011:18:1;;;9004:36;9057:19;;22167:62:0::1;8680:402:1::0;22167:62:0::1;22281:4;22264:13;9046:11:::0;;;8958:107;22264:13:::1;22255:22;::::0;:6;:22:::1;:::i;:::-;22254:31;;;;:::i;:::-;22240:11;:45:::0;;;22301:25:::1;::::0;2760::1;;;22301::0::1;::::0;2748:2:1;2733:18;22301:25:0::1;;;;;;;;22101:233:::0;:::o;21048:328::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21113:1:::1;21101:9;:13:::0;;;21137:1:::1;21125:9;:13:::0;;;21164:21:::1;::::0;::::1;:::i;:::-;21149:12;:36:::0;21211:1:::1;21198:10;:14:::0;;;-1:-1:-1;21223:10:0::1;:14:::0;;;21264:23:::1;::::0;::::1;:::i;:::-;21248:13;:39:::0;21300:14:::1;:22:::0;;-1:-1:-1;;21300:22:0::1;::::0;;21338:30:::1;::::0;21352:15:::1;::::0;21338:30:::1;::::0;21317:5:::1;::::0;21338:30:::1;21048:328::o:0;20699:341::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;20788:9:::1;:20:::0;;;20831:1:::1;20819:9;:13:::0;;;20858:21:::1;::::0;20800:8;20858:21:::1;:::i;:::-;20843:12;:36:::0;20892:10:::1;:22:::0;;;-1:-1:-1;20925:10:0::1;:14:::0;;;20966:23:::1;::::0;20905:9;20966:23:::1;:::i;:::-;20950:13;:39:::0;21005:27:::1;::::0;21016:15:::1;::::0;21005:27:::1;::::0;;;::::1;20699:341:::0;;:::o;7685:103::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;7750:30:::1;7777:1;7750:18;:30::i;:::-;7685:103::o:0;22603:202::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22718:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:32;;-1:-1:-1;;22718:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22766:31;;1703:41:1;;;22766:31:0::1;::::0;1676:18:1;22766:31:0::1;;;;;;;;22603:202:::0;;:::o;19812:711::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;19978:6:::1;:16:::0;;-1:-1:-1;;;;;;19978:16:0::1;19914:42;19978:16:::0;;::::1;::::0;;;20005:53:::1;20022:4;19914:42:::0;-1:-1:-1;;20005:8:0::1;:53::i;:::-;20087:7;-1:-1:-1::0;;;;;20087:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20076:40:0::1;;20139:4;20159:7;-1:-1:-1::0;;;;;20159:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20076:108;::::0;-1:-1:-1;;;;;;20076:108:0::1;::::0;;;;;;-1:-1:-1;;;;;3928:15:1;;;20076:108:0::1;::::0;::::1;3910:34:1::0;3980:15;;3960:18;;;3953:43;3845:18;;20076:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20069:4;:115:::0;;-1:-1:-1;;;;;;20069:115:0::1;-1:-1:-1::0;;;;;20069:115:0;;;::::1;::::0;;::::1;::::0;;20195:46:::1;::::0;-1:-1:-1;20195:25:0::1;:46::i;:::-;20289:4;::::0;20252:49:::1;::::0;-1:-1:-1;;;;;20289:4:0::1;::::0;20252:28:::1;:49::i;:::-;20312:7;-1:-1:-1::0;;;;;20312:23:0::1;;20343:9;20376:4;20396:24;20414:4;-1:-1:-1::0;;;;;9190:16:0;9163:7;9190:16;;;;;;;;;;;;9073:141;20396:24:::1;20435:1;20451::::0;20467:7:::1;7535:6:::0;;-1:-1:-1;;;;;7535:6:0;;7462:87;20467:7:::1;20312:203;::::0;::::1;::::0;;;-1:-1:-1;;;;;;20312:203:0;;;-1:-1:-1;;;;;10097:15:1;;;20312:203:0::1;::::0;::::1;10079:34:1::0;10129:18;;;10122:34;;;;10172:18;;;10165:34;;;;10215:18;;;10208:34;10279:15;;;10258:19;;;10251:44;20489:15:0::1;10311:19:1::0;;;10304:35;10013:19;;20312:203:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24288:160::-:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;24394:11:::1;::::0;24364:42:::1;::::0;-1:-1:-1;;;;;24394:11:0;;::::1;::::0;24364:42;::::1;::::0;::::1;::::0;24394:11:::1;::::0;24364:42:::1;24417:11;:23:::0;;-1:-1:-1;;;;;;24417:23:0::1;-1:-1:-1::0;;;;;24417:23:0;;;::::1;::::0;;;::::1;::::0;;24288:160::o;8745:104::-;8801:13;8834:7;8827:14;;;;;:::i;23813:284::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;23961:4:::1;::::0;-1:-1:-1;;;;;23961:4:0;;::::1;23952:13:::0;;::::1;::::0;23930:104:::1;;;::::0;-1:-1:-1;;;23930:104:0;;10863:2:1;23930:104:0::1;::::0;::::1;10845:21:1::0;10902:2;10882:18;;;10875:30;10941:34;10921:18;;;10914:62;-1:-1:-1;;;10992:18:1;;;10985:39;11041:19;;23930:104:0::1;10661:405:1::0;23930:104:0::1;24047:42;24076:5;24083;24047:28;:42::i;:::-;23813:284:::0;;:::o;23194:422::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;23310:10:::1;:26:::0;;;23347:10:::1;:20:::0;;;23394:23:::1;23360:7:::0;23323:13;23394:23:::1;:::i;:::-;23378:13;:39:::0;;;23467:3:::1;-1:-1:-1::0;23450:20:0::1;23428:111;;;::::0;-1:-1:-1;;;23428:111:0;;11273:2:1;23428:111:0::1;::::0;::::1;11255:21:1::0;11312:2;11292:18;;;11285:30;11351:34;11331:18;;;11324:62;-1:-1:-1;;;11402:18:1;;;11395:39;11451:19;;23428:111:0::1;11071:405:1::0;23428:111:0::1;23570:13;::::0;23585:10:::1;::::0;23597::::1;::::0;23555:53:::1;::::0;;11683:25:1;;;11739:2;11724:18;;11717:34;;;;11767:18;;;11760:34;23555:53:0::1;::::0;11671:2:1;11656:18;23555:53:0::1;;;;;;;;23194:422:::0;;:::o;10665:475::-;896:10;10783:4;10827:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10827:34:0;;;;;;;;;;10894:35;;;;10872:122;;;;-1:-1:-1;;;10872:122:0;;12007:2:1;10872:122:0;;;11989:21:1;12046:2;12026:18;;;12019:30;12085:34;12065:18;;;12058:62;-1:-1:-1;;;12136:18:1;;;12129:35;12181:19;;10872:122:0;11805:401:1;10872:122:0;11030:67;896:10;11053:7;11081:15;11062:16;:34;11030:8;:67::i;:::-;-1:-1:-1;11128:4:0;;10665:475;-1:-1:-1;;;10665:475:0:o;9222:200::-;9333:4;9350:42;896:10;9374:9;9385:6;9350:9;:42::i;22813:373::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22928:9:::1;:25:::0;;;22964:9:::1;:19:::0;;;23009:21:::1;22976:7:::0;22940:13;23009:21:::1;:::i;:::-;22994:12;:36:::0;;;23065:3:::1;-1:-1:-1::0;23049:19:0::1;23041:72;;;::::0;-1:-1:-1;;;23041:72:0;;12413:2:1;23041:72:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:34;12471:18;;;12464:62;-1:-1:-1;;;12542:18:1;;;12535:38;12590:19;;23041:72:0::1;12211:404:1::0;23041:72:0::1;23143:12;::::0;23157:9:::1;::::0;23168::::1;::::0;23129:49:::1;::::0;;11683:25:1;;;11739:2;11724:18;;11717:34;;;;11767:18;;;11760:34;23129:49:0::1;::::0;11671:2:1;11656:18;23129:49:0::1;11481:319:1::0;23624:181:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23709:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;23709:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23763:34;;1703:41:1;;;23763:34:0::1;::::0;1676:18:1;23763:34:0::1;1563:187:1::0;21544:549:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21710:1:::1;21702:4;:9;;21680:111;;;::::0;-1:-1:-1;;;21680:111:0;;12822:2:1;21680:111:0::1;::::0;::::1;12804:21:1::0;12861:2;12841:18;;;12834:30;12900:34;12880:18;;;12873:62;-1:-1:-1;;;12951:18:1;;;12944:50;13011:19;;21680:111:0::1;12620:416:1::0;21680:111:0::1;21818:4;21810;:12;;21802:67;;;::::0;-1:-1:-1;;;21802:67:0;;13243:2:1;21802:67:0::1;::::0;::::1;13225:21:1::0;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:40;13422:19;;21802:67:0::1;13041:406:1::0;21802:67:0::1;21882:15;:26:::0;;-1:-1:-1;;;;21882:26:0::1;-1:-1:-1::0;;;21882:26:0;::::1;;;;::::0;;9046:11;;21961:5:::1;::::0;21953:4;;21937:20:::1;;;;:::i;:::-;21936:30;;;;:::i;:::-;21919:14;:47:::0;22019:5:::1;22011:4:::0;21995:13:::1;9046:11:::0;;;8958:107;21995:13:::1;:20;;;;:::i;:::-;21994:30;;;;:::i;:::-;21977:14;:47:::0;22040:45:::1;::::0;;4228:14:1;;4221:22;4203:41;;4275:2;4260:18;;4253:34;;;4303:18;;;4296:34;;;22040:45:0::1;::::0;4191:2:1;4176:18;22040:45:0::1;;;;;;;21544:549:::0;;;:::o;21384:152::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;21446:20:::1;:28:::0;;-1:-1:-1;;21446:28:0::1;::::0;;21490:38:::1;::::0;21512:15:::1;::::0;21490:38:::1;::::0;21469:5:::1;::::0;21490:38:::1;21384:152::o:0;22342:253::-;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;22430:1:::1;22420:6;:11;;22412:66;;;::::0;-1:-1:-1;;;22412:66:0;;13654:2:1;22412:66:0::1;::::0;::::1;13636:21:1::0;13693:2;13673:18;;;13666:30;13732:34;13712:18;;;13705:62;-1:-1:-1;;;13783:18:1;;;13776:40;13833:19;;22412:66:0::1;13452:406:1::0;22412:66:0::1;22534:4;22517:13;9046:11:::0;;;8958:107;22517:13:::1;22508:22;::::0;:6;:22:::1;:::i;:::-;22507:31;;;;:::i;:::-;22489:15;:49:::0;;;22554:33:::1;::::0;2760:25:1;;;22554:33:0::1;::::0;2748:2:1;2733:18;22554:33:0::1;2614:177:1::0;7796:238:0;7535:6;;-1:-1:-1;;;;;7535:6:0;896:10;7597:23;7589:68;;;;-1:-1:-1;;;7589:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7899:22:0;::::1;7877:110;;;::::0;-1:-1:-1;;;7877:110:0;;14065:2:1;7877:110:0::1;::::0;::::1;14047:21:1::0;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;-1:-1:-1;;;14194:18:1;;;14187:36;14240:19;;7877:110:0::1;13863:402:1::0;7877:110:0::1;7998:28;8017:8;7998:18;:28::i;:::-;7796:238:::0;:::o;13004:380::-;-1:-1:-1;;;;;13140:19:0;;13132:68;;;;-1:-1:-1;;;13132:68:0;;14472:2:1;13132:68:0;;;14454:21:1;14511:2;14491:18;;;14484:30;14550:34;14530:18;;;14523:62;-1:-1:-1;;;14601:18:1;;;14594:34;14645:19;;13132:68:0;14270:400:1;13132:68:0;-1:-1:-1;;;;;13219:21:0;;13211:68;;;;-1:-1:-1;;;13211:68:0;;14877:2:1;13211:68:0;;;14859:21:1;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;-1:-1:-1;;;15006:18:1;;;14999:32;15048:19;;13211:68:0;14675:398:1;13211:68:0;-1:-1:-1;;;;;13292:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13344:32;;2760:25:1;;;13344:32:0;;2733:18:1;13344:32:0;;;;;;;13004:380;;;:::o;26289:4372::-;-1:-1:-1;;;;;26421:18:0;;26413:68;;;;-1:-1:-1;;;26413:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26500:16:0;;26492:64;;;;-1:-1:-1;;;26492:64:0;;;;;;;:::i;:::-;26600:1;26591:6;:10;:38;;;-1:-1:-1;;;;;;26605:24:0;;;;;;:18;:24;;;;;;;;26591:38;26569:122;;;;-1:-1:-1;;;26569:122:0;;16090:2:1;26569:122:0;;;16072:21:1;16129:2;16109:18;;;16102:30;16168:34;16148:18;;;16141:62;-1:-1:-1;;;16219:18:1;;;16212:32;16261:19;;26569:122:0;15888:398:1;26569:122:0;26708:14;;;;;;;26704:2337;;;7535:6;;-1:-1:-1;;;;;26761:15:0;;;7535:6;;26761:15;;;;:49;;-1:-1:-1;7535:6:0;;-1:-1:-1;;;;;26797:13:0;;;7535:6;;26797:13;;26761:49;:86;;;;-1:-1:-1;;;;;;26831:16:0;;;;26761:86;:128;;;;-1:-1:-1;;;;;;26868:21:0;;26882:6;26868:21;;26761:128;:158;;;;-1:-1:-1;26911:8:0;;-1:-1:-1;;;26911:8:0;;;;26910:9;26761:158;26739:2291;;;26959:6;;;;26954:226;;-1:-1:-1;;;;;27024:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;27052:22:0;;;;;;:18;:22;;;;;;;;27024:50;26990:170;;;;-1:-1:-1;;;26990:170:0;;16493:2:1;26990:170:0;;;16475:21:1;16532:2;16512:18;;;16505:30;16571:34;16551:18;;;16544:62;-1:-1:-1;;;16622:18:1;;;16615:32;16664:19;;26990:170:0;16291:398:1;26990:170:0;27202:7;;;;;;;27198:220;;;-1:-1:-1;;;;;27268:20:0;;;;;;:14;:20;;;;;;;;;:42;;-1:-1:-1;;;;;;27292:18:0;;;;;;:14;:18;;;;;;;;27268:42;27234:164;;;;-1:-1:-1;;;27234:164:0;;16896:2:1;27234:164:0;;;16878:21:1;16935:2;16915:18;;;16908:30;16974:34;16954:18;;;16947:62;-1:-1:-1;;;17025:18:1;;;17018:34;17069:19;;27234:164:0;16694:400:1;27234:164:0;27440:20;;;;;;;27436:623;;;7535:6;;-1:-1:-1;;;;;27515:13:0;;;7535:6;;27515:13;;;;:63;;-1:-1:-1;27571:6:0;;-1:-1:-1;;;;;27557:21:0;;;27571:6;;27557:21;;27515:63;:111;;;;-1:-1:-1;27621:4:0;;-1:-1:-1;;;;;27607:19:0;;;27621:4;;27607:19;;27515:111;27485:555;;;27744:9;27715:39;;;;:28;:39;;;;;;27790:12;-1:-1:-1;27677:258:0;;;;-1:-1:-1;;;27677:258:0;;17301:2:1;27677:258:0;;;17283:21:1;17340:2;17320:18;;;17313:30;17379:34;17359:18;;;17352:62;17450:34;17430:18;;;17423:62;-1:-1:-1;;;17501:19:1;;;17494:40;17551:19;;27677:258:0;17099:477:1;27677:258:0;27991:9;27962:39;;;;:28;:39;;;;;28004:12;27962:54;;27485:555;-1:-1:-1;;;;;28081:15:0;;;;;;:9;:15;;;;;;;;:41;;;;-1:-1:-1;;;;;;28101:21:0;;;;;;:17;:21;;;;;;;;28100:22;28081:41;28077:938;;;28191:11;;28181:6;:21;;28147:151;;;;-1:-1:-1;;;28147:151:0;;17783:2:1;28147:151:0;;;17765:21:1;17822:2;17802:18;;;17795:30;17861:34;17841:18;;;17834:62;-1:-1:-1;;;17912:18:1;;;17905:42;17964:19;;28147:151:0;17581:408:1;28147:151:0;28381:15;;-1:-1:-1;;;;;9190:16:0;;9163:7;9190:16;;;;;;;;;;;28355:22;;:6;:22;:::i;:::-;:41;;28321:146;;;;-1:-1:-1;;;28321:146:0;;18196:2:1;28321:146:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:49;18313:18;;28321:146:0;17994:343:1;28321:146:0;28077:938;;;-1:-1:-1;;;;;28536:13:0;;;;;;:9;:13;;;;;;;;:41;;;;-1:-1:-1;;;;;;28554:23:0;;;;;;:17;:23;;;;;;;;28553:24;28536:41;28510:505;;;28664:11;;28654:6;:21;;28620:152;;;;-1:-1:-1;;;28620:152:0;;18544:2:1;28620:152:0;;;18526:21:1;18583:2;18563:18;;;18556:30;18622:34;18602:18;;;18595:62;-1:-1:-1;;;18673:18:1;;;18666:43;18726:19;;28620:152:0;18342:409:1;28510:505:0;-1:-1:-1;;;;;28803:21:0;;;;;;:17;:21;;;;;;;;28798:217;;28909:15;;-1:-1:-1;;;;;9190:16:0;;9163:7;9190:16;;;;;;;;;;;28883:22;;:6;:22;:::i;:::-;:41;;28849:146;;;;-1:-1:-1;;;28849:146:0;;18196:2:1;28849:146:0;;;18178:21:1;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:49;18313:18;;28849:146:0;17994:343:1;28849:146:0;29102:4;29053:28;9190:16;;;;;;;;;;;29160:14;;29136:38;;;;;;;29205:33;;-1:-1:-1;29230:8:0;;-1:-1:-1;;;29230:8:0;;;;29229:9;29205:33;:65;;;;-1:-1:-1;29255:15:0;;-1:-1:-1;;;29255:15:0;;;;29205:65;:98;;;;-1:-1:-1;;;;;;29288:15:0;;;;;;:9;:15;;;;;;;;29287:16;29205:98;:138;;;;-1:-1:-1;;;;;;29321:22:0;;;;;;:18;:22;;;;;;;;29320:23;29205:138;:180;;;;-1:-1:-1;;;;;;29361:24:0;;;;;;:18;:24;;;;;;;;29360:25;29205:180;:221;;;;;29412:14;;29402:6;:24;;29205:221;29187:403;;;29453:8;:15;;-1:-1:-1;;;;29453:15:0;-1:-1:-1;;;29453:15:0;;;29530:14;;29483:64;;29492:54;;29496:6;;29504:41;;29508:20;;29504:3;:41::i;:::-;29492:3;:54::i;:::-;29483:8;:64::i;:::-;29562:8;:16;;-1:-1:-1;;;;29562:16:0;;;29187:403;29618:8;;-1:-1:-1;;;;;29643:24:0;;29602:12;29643:24;;;:18;:24;;;;;;29618:8;-1:-1:-1;;;29618:8:0;;;;;29617:9;;29643:24;;:50;;-1:-1:-1;;;;;;29671:22:0;;;;;;:18;:22;;;;;;;;29643:50;29639:98;;;-1:-1:-1;29720:5:0;29639:98;29780:15;;29749:12;;-1:-1:-1;;;29780:15:0;;;;:28;;;;-1:-1:-1;29800:8:0;;-1:-1:-1;;;29800:8:0;;;;29799:9;29780:28;29776:832;;;29829:7;29825:772;;;-1:-1:-1;;;;;29861:13:0;;;;;;:9;:13;;;;;;;;:34;;;;;29894:1;29878:13;;:17;29861:34;29857:575;;;29927:34;29957:3;29927:25;29938:13;;29927:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29920:41;;30022:13;;30008:10;;30001:4;:17;;;;:::i;:::-;30000:35;;;;:::i;:::-;29984:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;30102:13:0;;30088:10;;30081:17;;:4;:17;:::i;:::-;30080:35;;;;:::i;:::-;30058:18;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;29857:575:0;;-1:-1:-1;29857:575:0;;-1:-1:-1;;;;;30162:15:0;;;;;;:9;:15;;;;;;;;:35;;;;;30196:1;30181:12;;:16;30162:35;30158:274;;;30229:33;30258:3;30229:24;30240:12;;30229:6;:10;;:24;;;;:::i;:33::-;30222:40;;30322:12;;30309:9;;30302:4;:16;;;;:::i;:::-;30301:33;;;;:::i;:::-;30285:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30400:12:0;;30387:9;;30380:16;;:4;:16;:::i;:::-;30379:33;;;;:::i;:::-;30357:18;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;30158:274:0;30454:8;;30450:99;;30487:42;30503:4;30517;30524;30487:15;:42::i;:::-;30567:14;30577:4;30567:14;;:::i;:::-;;;29825:772;30620:33;30636:4;30642:2;30646:6;30620:15;:33::i;:::-;26402:4259;;;;26289:4372;;;:::o;8042:191::-;8135:6;;;-1:-1:-1;;;;;8152:17:0;;;-1:-1:-1;;;;;;8152:17:0;;;;;;;8185:40;;8135:6;;;8152:17;8135:6;;8185:40;;8116:16;;8185:40;8105:128;8042:191;:::o;24105:175::-;-1:-1:-1;;;;;24189:16:0;;;;;;:9;:16;;;;;;:24;;-1:-1:-1;;24189:24:0;;;;;;;;;;24231:41;;24189:24;;:16;24231:41;;;24105:175;;:::o;26174:107::-;26231:7;26263:1;26259;:5;26258:15;;26272:1;26258:15;;;26268:1;26258:15;26251:22;26174:107;-1:-1:-1;;;26174:107:0:o;25192:401::-;25301:4;25257:23;9190:16;;;;;;;;;;;;25322:20;;;25318:59;;25359:7;25192:401;:::o;25318:59::-;25387:36;25404:18;25387:16;:36::i;:::-;25463:21;25499:22;;25495:91;;25538:36;25552:21;25538:13;:36::i;:::-;25246:347;;25192:401;:::o;4975:98::-;5033:7;5060:5;5064:1;5060;:5;:::i;5081:98::-;5139:7;5166:5;5170:1;5166;:5;:::i;11148:850::-;-1:-1:-1;;;;;11288:20:0;;11280:70;;;;-1:-1:-1;;;11280:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11369:23:0;;11361:71;;;;-1:-1:-1;;;11361:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11520:15:0;;;11501:16;11520:15;;;;;;;;;;;;11565:18;;;;;;;;11616;;;;11594:106;;;;-1:-1:-1;;;11594:106:0;;19091:2:1;11594:106:0;;;19073:21:1;19130:2;19110:18;;;19103:30;19169:34;19149:18;;;19142:62;-1:-1:-1;;;19220:18:1;;;19213:36;19266:19;;11594:106:0;18889:402:1;11594:106:0;11800:11;;:31;;11825:6;11800:31;;;11814:8;11800:31;-1:-1:-1;;;;;11736:15:0;;;:7;:15;;;;;;;;;;;11771:61;;;11736:96;;;11854:18;;;;;;;;:28;;11876:6;;11736:7;11854:28;;11876:6;;11854:28;:::i;:::-;;;;;;;;11915:9;-1:-1:-1;;;;;11898:35:0;11907:6;-1:-1:-1;;;;;11898:35:0;;11926:6;11898:35;;;;2760:25:1;;2748:2;2733:18;;2614:177;11898:35:0;;;;;;;;11269:729;;11148:850;;;:::o;24622:562::-;24772:16;;;24786:1;24772:16;;;;;;;;24748:21;;24772:16;;;;;;;;;;-1:-1:-1;24772:16:0;24748:40;;24817:4;24799;24804:1;24799:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24799:23:0;;;:7;;;;;;;;;;:23;;;;24843:6;;:13;;;-1:-1:-1;;;24843:13:0;;;;:6;;;;;:11;;:13;;;;;24799:7;;24843:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24833:4;24838:1;24833:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24833:23:0;;;:7;;;;;;;;;:23;24901:6;;24869:53;;24886:4;;24901:6;24910:11;24869:8;:53::i;:::-;24961:6;;:215;;-1:-1:-1;;;24961:215:0;;-1:-1:-1;;;;;24961:6:0;;;;:57;;:215;;25033:11;;24961:6;;25103:4;;25130;;25150:15;;24961:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24677:507;24622:562;:::o;19583:221::-;19658:1;19649:6;:10;19641:52;;;;-1:-1:-1;;;19641:52:0;;20615:2:1;19641:52:0;;;20597:21:1;20654:2;20634:18;;;20627:30;20693:31;20673:18;;;20666:59;20742:18;;19641:52:0;20413:353:1;19641:52:0;19712:10;;-1:-1:-1;;;;;19712:10:0;19704:40;19733:10;19742:1;19733:6;:10;:::i;:::-;19704:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19763:11:0;;-1:-1:-1;;;;;19763:11:0;19755:41;19785:10;19794:1;19785:6;:10;:::i;:::-;19755:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;554:548:1;666:4;695:2;724;713:9;706:21;756:6;750:13;799:6;794:2;783:9;779:18;772:34;824:1;834:140;848:6;845:1;842:13;834:140;;;943:14;;;939:23;;933:30;909:17;;;928:2;905:26;898:66;863:10;;834:140;;;838:3;1023:1;1018:2;1009:6;998:9;994:22;990:31;983:42;1093:2;1086;1082:7;1077:2;1069:6;1065:15;1061:29;1050:9;1046:45;1042:54;1034:62;;;;554:548;;;;:::o;1107:131::-;-1:-1:-1;;;;;1182:31:1;;1172:42;;1162:70;;1228:1;1225;1218:12;1243:315;1311:6;1319;1372:2;1360:9;1351:7;1347:23;1343:32;1340:52;;;1388:1;1385;1378:12;1340:52;1427:9;1414:23;1446:31;1471:5;1446:31;:::i;:::-;1496:5;1548:2;1533:18;;;;1520:32;;-1:-1:-1;;;1243:315:1:o;1755:160::-;1820:20;;1876:13;;1869:21;1859:32;;1849:60;;1905:1;1902;1895:12;1849:60;1755:160;;;:::o;1920:689::-;2012:6;2020;2028;2081:2;2069:9;2060:7;2056:23;2052:32;2049:52;;;2097:1;2094;2087:12;2049:52;2137:9;2124:23;2166:18;2207:2;2199:6;2196:14;2193:34;;;2223:1;2220;2213:12;2193:34;2261:6;2250:9;2246:22;2236:32;;2306:7;2299:4;2295:2;2291:13;2287:27;2277:55;;2328:1;2325;2318:12;2277:55;2368:2;2355:16;2394:2;2386:6;2383:14;2380:34;;;2410:1;2407;2400:12;2380:34;2465:7;2458:4;2448:6;2445:1;2441:14;2437:2;2433:23;2429:34;2426:47;2423:67;;;2486:1;2483;2476:12;2423:67;2517:4;2509:13;;;;-1:-1:-1;2541:6:1;-1:-1:-1;2566:37:1;;2582:20;;;-1:-1:-1;2566:37:1;:::i;:::-;2556:47;;1920:689;;;;;:::o;2796:247::-;2855:6;2908:2;2896:9;2887:7;2883:23;2879:32;2876:52;;;2924:1;2921;2914:12;2876:52;2963:9;2950:23;2982:31;3007:5;2982:31;:::i;3048:456::-;3125:6;3133;3141;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;3249:9;3236:23;3268:31;3293:5;3268:31;:::i;:::-;3318:5;-1:-1:-1;3375:2:1;3360:18;;3347:32;3388:33;3347:32;3388:33;:::i;:::-;3048:456;;3440:7;;-1:-1:-1;;;3494:2:1;3479:18;;;;3466:32;;3048:456::o;4341:180::-;4400:6;4453:2;4441:9;4432:7;4428:23;4424:32;4421:52;;;4469:1;4466;4459:12;4421:52;-1:-1:-1;4492:23:1;;4341:180;-1:-1:-1;4341:180:1:o;4526:248::-;4594:6;4602;4655:2;4643:9;4634:7;4630:23;4626:32;4623:52;;;4671:1;4668;4661:12;4623:52;-1:-1:-1;;4694:23:1;;;4764:2;4749:18;;;4736:32;;-1:-1:-1;4526:248:1:o;5195:315::-;5260:6;5268;5321:2;5309:9;5300:7;5296:23;5292:32;5289:52;;;5337:1;5334;5327:12;5289:52;5376:9;5363:23;5395:31;5420:5;5395:31;:::i;:::-;5445:5;-1:-1:-1;5469:35:1;5500:2;5485:18;;5469:35;:::i;:::-;5459:45;;5195:315;;;;;:::o;6077:316::-;6151:6;6159;6167;6220:2;6208:9;6199:7;6195:23;6191:32;6188:52;;;6236:1;6233;6226:12;6188:52;6259:26;6275:9;6259:26;:::i;:::-;6249:36;6332:2;6317:18;;6304:32;;-1:-1:-1;6383:2:1;6368:18;;;6355:32;;6077:316;-1:-1:-1;;;6077:316:1:o;6398:388::-;6466:6;6474;6527:2;6515:9;6506:7;6502:23;6498:32;6495:52;;;6543:1;6540;6533:12;6495:52;6582:9;6569:23;6601:31;6626:5;6601:31;:::i;:::-;6651:5;-1:-1:-1;6708:2:1;6693:18;;6680:32;6721:33;6680:32;6721:33;:::i;:::-;6773:7;6763:17;;;6398:388;;;;;:::o;6791:380::-;6870:1;6866:12;;;;6913;;;6934:61;;6988:4;6980:6;6976:17;6966:27;;6934:61;7041:2;7033:6;7030:14;7010:18;7007:38;7004:161;;7087:10;7082:3;7078:20;7075:1;7068:31;7122:4;7119:1;7112:15;7150:4;7147:1;7140:15;7004:161;;6791:380;;;:::o;7176:356::-;7378:2;7360:21;;;7397:18;;;7390:30;7456:34;7451:2;7436:18;;7429:62;7523:2;7508:18;;7176:356::o;7537:127::-;7598:10;7593:3;7589:20;7586:1;7579:31;7629:4;7626:1;7619:15;7653:4;7650:1;7643:15;8078:127;8139:10;8134:3;8130:20;8127:1;8120:31;8170:4;8167:1;8160:15;8194:4;8191:1;8184:15;8210:125;8275:9;;;8296:10;;;8293:36;;;8309:18;;:::i;9087:168::-;9160:9;;;9191;;9208:15;;;9202:22;;9188:37;9178:71;;9229:18;;:::i;9260:217::-;9300:1;9326;9316:132;;9370:10;9365:3;9361:20;9358:1;9351:31;9405:4;9402:1;9395:15;9433:4;9430:1;9423:15;9316:132;-1:-1:-1;9462:9:1;;9260:217::o;9482:251::-;9552:6;9605:2;9593:9;9584:7;9580:23;9576:32;9573:52;;;9621:1;9618;9611:12;9573:52;9653:9;9647:16;9672:31;9697:5;9672:31;:::i;10350:306::-;10438:6;10446;10454;10507:2;10495:9;10486:7;10482:23;10478:32;10475:52;;;10523:1;10520;10513:12;10475:52;10552:9;10546:16;10536:26;;10602:2;10591:9;10587:18;10581:25;10571:35;;10646:2;10635:9;10631:18;10625:25;10615:35;;10350:306;;;;;:::o;15078:401::-;15280:2;15262:21;;;15319:2;15299:18;;;15292:30;15358:34;15353:2;15338:18;;15331:62;-1:-1:-1;;;15424:2:1;15409:18;;15402:35;15469:3;15454:19;;15078:401::o;15484:399::-;15686:2;15668:21;;;15725:2;15705:18;;;15698:30;15764:34;15759:2;15744:18;;15737:62;-1:-1:-1;;;15830:2:1;15815:18;;15808:33;15873:3;15858:19;;15484:399::o;18756:128::-;18823:9;;;18844:11;;;18841:37;;;18858:18;;:::i;19428:980::-;19690:4;19738:3;19727:9;19723:19;19769:6;19758:9;19751:25;19795:2;19833:6;19828:2;19817:9;19813:18;19806:34;19876:3;19871:2;19860:9;19856:18;19849:31;19900:6;19935;19929:13;19966:6;19958;19951:22;20004:3;19993:9;19989:19;19982:26;;20043:2;20035:6;20031:15;20017:29;;20064:1;20074:195;20088:6;20085:1;20082:13;20074:195;;;20153:13;;-1:-1:-1;;;;;20149:39:1;20137:52;;20244:15;;;;20209:12;;;;20185:1;20103:9;20074:195;;;-1:-1:-1;;;;;;;20325:32:1;;;;20320:2;20305:18;;20298:60;-1:-1:-1;;;20389:3:1;20374:19;20367:35;20286:3;19428:980;-1:-1:-1;;;19428:980:1:o

Swarm Source

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