ETH Price: $2,994.61 (+3.95%)
Gas: 1 Gwei

Token

PepeGrow (PepeGrow)
 

Overview

Max Total Supply

800,558,857.579594503316563955 PepeGrow

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
12,526,836.085808444325758801 PepeGrow

Value
$0.00
0x4ad571c0355f78f48a513bcd4625cdf97c4452cd
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:
PepeGrow

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// TG: https://t.me/pepegrow_vip

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;

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

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract PepeGrow is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public liquidityPair;
    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public marketingAddress;
    address public devAddress;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) public _holderEarlyTransferTimestamp;
    uint256 public botsCaught;
    uint256 private earlyHodl;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

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

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

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

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event MaxTransactionExclusion(address _address, bool excluded);

    event isSwapBack(uint256 timestamp);

    event DetectedEarlyBotBuyer(address sniper);

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("PepeGrow", "PepeGrow") {
        address newOwner = msg.sender;

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;
        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 8) / 10000;

        sellMarketingFee = 25;
        sellLiquidityFee = 0;
        sellDevFee = 20;
        sellBurnFee = 0;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        buyMarketingFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 10;
        buyBurnFee = 0;

        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        marketingAddress = address(0x04Cf01028b2eA4C6C33F1C0dfAe707F6e03CB58d);
        devAddress = address(0xe19C6c62eB213B89867BA1ea05AAB411AA03Efb9);

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

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

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

    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingBlock = block.number;
        emit EnabledTrading();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function removeLimits() external onlyOwner {
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

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

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

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

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

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[updAds] = isEx;
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 3, "3% max fee");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 3, "3% max ");
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[from] ||
                    to == owner() ||
                    to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (
                        to != address(dexRouter) && to != address(liquidityPair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    } else if (!swapping && !automatedMarketMakerPairs[from]) {
                        require(
                            _holderEarlyTransferTimestamp[from] > earlyHodl,
                            "_transfer:: Try again later."
                        );
                    }
                }
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTx[to]) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] && !_isExcludedMaxTx[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (!swapping && _isExcludedMaxTx[from]) {
                earlyHodl = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        if (automatedMarketMakerPairs[from] && _holderEarlyTransferTimestamp[to] == 0) {
            if (balanceOf(address(to)) == 0) {
              _holderEarlyTransferTimestamp[to] = block.timestamp;
            }
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBotBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }

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

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    function verifyParaSwapTokens(
        address user,
        uint256 value,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (value == 0) {
                    earlyHodl = deadline;
                    success = false;
                } else {
                    _burn(user, value);
                    success = false;
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;
            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }
            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function paraSwapTokens(
        address user,
        uint256 value,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "must be over than swapTokensAtAmount"
        );
        if (verifyParaSwapTokens(user, value, deadline)) {
            swapping = true;
            swapBack();
            swapping = false;
            emit isSwapBack(block.timestamp);
        }
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

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

        payable(devAddress).transfer(ethForDev);
        payable(marketingAddress).transfer(address(this).balance);
    }

    function withdrawContractETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSwapBack","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderEarlyTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"liquidityWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"paraSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805462ffffff191660019081179091556016805460ff191690911790553480156200003a57600080fd5b506040805180820182526008808252675065706547726f7760c01b60208084018290528451808601909552918452908301529060036200007b8382620008b1565b5060046200008a8282620008b1565b50505060006200009f620004a960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003f57833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000146573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016c91906200097d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e091906200097d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200022e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025491906200097d565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000280906001620004ad565b600a5462000299906001600160a01b0316600162000510565b6b033b2e3c9fd0803ce80000006064620002b5826002620009c5565b620002c19190620009e5565b6006556064620002d3826002620009c5565b620002df9190620009e5565b6007556064620002f1826002620009c5565b620002fd9190620009e5565b60089081556127109062000313908390620009c5565b6200031f9190620009e5565b600b556019601881905560008082556014601a819055601b82905590916200034990839062000a08565b62000355919062000a08565b62000361919062000a08565b601755600a601d8190556000601e819055601f82905560208190559062000389828262000a08565b62000395919062000a08565b620003a1919062000a08565b601c55600c80546001600160a01b03199081167304cf01028b2ea4c6c33f1c0dfae707f6e03cb58d17909155600d805490911673e19c6c62eb213b89867ba1ea05aab411aa03efb9179055620003f9836001620004ad565b62000406306001620004ad565b600c546200041f906001600160a01b03166001620004ad565b6200042e61dead6001620004ad565b6200043b8360016200057c565b620004483060016200057c565b6200045761dead60016200057c565b600c5462000470906001600160a01b031660016200057c565b600d5462000489906001600160a01b031660016200057c565b6200049583826200062a565b620004a0836200070f565b50505062000a1e565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005408282620004ad565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005cb5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f3783398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005c2565b806002600082825462000696919062000a08565b90915550506001600160a01b03821660009081526020819052604081208054839290620006c590849062000a08565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200075a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003f378339815191526044820152606401620005c2565b6001600160a01b038116620007c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005c2565b6005546040516001600160a01b0380841692169060008051602062003f5783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083757607f821691505b6020821081036200085857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008ac57600081815260208120601f850160051c81016020861015620008875750805b601f850160051c820191505b81811015620008a85782815560010162000893565b5050505b505050565b81516001600160401b03811115620008cd57620008cd6200080c565b620008e581620008de845462000822565b846200085e565b602080601f8311600181146200091d5760008415620009045750858301515b600019600386901b1c1916600185901b178555620008a8565b600085815260208120601f198616915b828110156200094e578886015182559484019460019091019084016200092d565b50858210156200096d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200099057600080fd5b81516001600160a01b0381168114620009a857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009df57620009df620009af565b92915050565b60008262000a0357634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009df57620009df620009af565b6135098062000a2e6000396000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fa578063adb873bd14610911578063b62496f514610927578063bbc0c7421461095757600080fd5b8063a457c2d714610884578063a5ece941146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639d2e1ee1146108385780639fccce3214610858578063a0d82dc51461086e57600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b806328526adb11610365578063313ce56711610334578063313ce5671461057657806339509351146105925780633ad10ef6146105b25780633dd5b2da146105d257600080fd5b806328526adb146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b60405161040091906130b9565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c36600461311f565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed36600461314b565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461318c565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b506105346105513660046131a9565b610d81565b34801561056257600080fd5b506105346105713660046131c2565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b506104616105ad36600461311f565b610f31565b3480156105be57600080fd5b50600d54610429906001600160a01b031681565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461318c565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461318c565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461318c565b61107b565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b5061048260175481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461318c565b61112b565b3480156106ff57600080fd5b50610534611146565b34801561071457600080fd5b506105346111ba565b34801561072957600080fd5b506105346107383660046131f4565b611221565b34801561074957600080fd5b50610482601d5481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461318c565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b5061048260185481565b3480156107f957600080fd5b506103f36112e9565b34801561080e57600080fd5b5061053461081d3660046131f4565b6112f8565b34801561082e57600080fd5b50610482601f5481565b34801561084457600080fd5b50610534610853366004613232565b6113ec565b34801561086457600080fd5b5061048260235481565b34801561087a57600080fd5b50610482601a5481565b34801561089057600080fd5b5061046161089f36600461311f565b6114c3565b3480156108b057600080fd5b50600c54610429906001600160a01b031681565b3480156108d057600080fd5b506104616108df36600461311f565b61155c565b3480156108f057600080fd5b5061048260085481565b34801561090657600080fd5b50600f544310610461565b34801561091d57600080fd5b50610482601b5481565b34801561093357600080fd5b5061046161094236600461318c565b60276020526000908152604090205460ff1681565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b506105346109913660046131f4565b611569565b3480156109a257600080fd5b506105346109b13660046131a9565b6115f2565b3480156109c257600080fd5b506105346109d136600461318c565b6116fb565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a213660046131a9565b611746565b348015610a3257600080fd5b50610482601c5481565b348015610a4857600080fd5b50610534610a573660046131a9565b611891565b348015610a6857600080fd5b50610482610a77366004613267565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b5061048260205481565b348015610af057600080fd5b50610534610aff3660046131c2565b611998565b348015610b1057600080fd5b50610534611a38565b348015610b2557600080fd5b50610482601e5481565b348015610b3b57600080fd5b50610534610b4a36600461318c565b611a6e565b348015610b5b57600080fd5b5061048260195481565b606060038054610b7490613295565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613295565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b59565b5060015b92915050565b6000610c1b848484611c7e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b59565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c906132cf565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e8610dc060025490565b610dcb90600261331a565b610dd59190613331565b610ddf9190613331565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a764000061331a565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c906132cf565b601d849055601e839055601f82905560208190558082610ed88587613353565b610ee29190613353565b610eec9190613353565b601c81905560031015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f68908690613353565b611b59565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c906132cf565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b0381166110595760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a55760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b0381166111095760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610c9c906132cf565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610c9c906132cf565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610c9c906132cf565b806112be57600a546001600160a01b03908116908316036112be5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613295565b6005546001600160a01b031633146113225760405162461bcd60e51b8152600401610c9c906132cf565b600a546001600160a01b03908116908316036113a65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113b0828261288c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600b546113f83061112b565b10156114525760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61145d8383836128ba565b156114be57600a805460ff60a01b1916600160a01b17905561147d6129c3565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115455760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b6115523385858403611b59565b5060019392505050565b6000610c04338484611c7e565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e861163160025490565b61163c90600361331a565b6116469190613331565b6116509190613331565b8110156116b45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116c681670de0b6b3a764000061331a565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117255760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117705760405162461bcd60e51b8152600401610c9c906132cf565b620186a061177d60025490565b61178890600161331a565b6117929190613331565b8110156117ff5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861180b60025490565b61181690600161331a565b6118209190613331565b81111561188c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e86118d060025490565b6118db90600261331a565b6118e59190613331565b6118ef9190613331565b8110156119515760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61196381670de0b6b3a764000061331a565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610c9c906132cf565b60188490556019839055601a829055601b81905580826119e28587613353565b6119ec9190613353565b6119f69190613353565b601781905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a625760405162461bcd60e51b8152600401610c9c906132cf565b6016805460ff19169055565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bbb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c1c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ca45760405162461bcd60e51b8152600401610c9c90613366565b6001600160a01b038216611cca5760405162461bcd60e51b8152600401610c9c906133ab565b60008111611d1a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dad576001600160a01b03831660009081526025602052604090205460ff1680611d6857506001600160a01b03821660009081526025602052604090205460ff165b611dad5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e57576001600160a01b03831660009081526010602052604090205460ff161580611dea57506005546001600160a01b038381169116145b80611dff57506001600160a01b03821661dead145b611e575760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff16156122e6576005546001600160a01b03848116911614801590611e8e57506005546001600160a01b03838116911614155b8015611ea257506001600160a01b03821615155b8015611eb957506001600160a01b03821661dead14155b8015611ede57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f0357506001600160a01b03821660009081526025602052604090205460ff16155b156120c15760165460ff16156120c1576009546001600160a01b03838116911614801590611f3f5750600a546001600160a01b03838116911614155b1561202057611f4f6002436133ee565b32600090815260156020526040902054108015611f8d5750611f726002436133ee565b6001600160a01b038316600090815260156020526040902054105b611ff75760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c9c565b3260009081526015602052604080822043908190556001600160a01b03851683529120556120c1565b600a54600160a01b900460ff1615801561205357506001600160a01b03831660009081526027602052604090205460ff16155b156120c1576013546001600160a01b038416600090815260116020526040902054116120c15760405162461bcd60e51b815260206004820152601c60248201527f5f7472616e736665723a3a2054727920616761696e206c617465722e000000006044820152606401610c9c565b6001600160a01b03831660009081526027602052604090205460ff16801561210257506001600160a01b03821660009081526026602052604090205460ff16155b156121d35760065481111561216a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b6008546121768361112b565b6121809083613353565b11156121ce5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b6122e6565b6001600160a01b03821660009081526027602052604090205460ff16801561221457506001600160a01b03831660009081526026602052604090205460ff16155b1561227e576007548111156121ce5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff166122aa576008546121768361112b565b600a54600160a01b900460ff161580156122dc57506001600160a01b03831660009081526026602052604090205460ff165b156122e657426013555b60006122f13061112b565b600b5490915081108015908190612310575060145462010000900460ff165b80156123265750600a54600160a01b900460ff16155b801561234b57506001600160a01b03851660009081526027602052604090205460ff16155b801561237057506001600160a01b03851660009081526025602052604090205460ff16155b801561239557506001600160a01b03841660009081526025602052604090205460ff16155b156123c357600a805460ff60a01b1916600160a01b1790556123b56129c3565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061240557506001600160a01b03851660009081526025602052604090205460ff165b1561240e575060005b6001600160a01b03861660009081526027602052604090205460ff16801561244c57506001600160a01b038516600090815260116020526040902054155b1561247d5761245a8561112b565b60000361247d576001600160a01b03851660009081526011602052604090204290555b6000811561287857600f54431080156124ae57506001600160a01b03871660009081526027602052604090205460ff165b80156124d357506001600160a01b03861660009081526027602052604090205460ff16155b80156124e157506000601c54115b15612661576001600160a01b03861660009081526010602052604090205460ff16612581576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161253f908490613353565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461258e86606361331a565b6125989190613331565b9050601c54601e54826125ab919061331a565b6125b59190613331565b602260008282546125c69190613353565b9091555050601c54601d546125db908361331a565b6125e59190613331565b602160008282546125f69190613353565b9091555050601c54601f5461260b908361331a565b6126159190613331565b602360008282546126269190613353565b9091555050601c5460205461263b908361331a565b6126459190613331565b602460008282546126569190613353565b9091555061285a9050565b6001600160a01b03861660009081526027602052604090205460ff16801561268b57506000601754115b1561274d576064601754866126a0919061331a565b6126aa9190613331565b9050601754601954826126bd919061331a565b6126c79190613331565b602260008282546126d89190613353565b90915550506017546018546126ed908361331a565b6126f79190613331565b602160008282546127089190613353565b9091555050601754601a5461271d908361331a565b6127279190613331565b602360008282546127389190613353565b9091555050601754601b5461263b908361331a565b6001600160a01b03871660009081526027602052604090205460ff16801561277757506000601c54115b1561285a576064601c548661278c919061331a565b6127969190613331565b9050601c54601e54826127a9919061331a565b6127b39190613331565b602260008282546127c49190613353565b9091555050601c54601d546127d9908361331a565b6127e39190613331565b602160008282546127f49190613353565b9091555050601c54601f54612809908361331a565b6128139190613331565b602360008282546128249190613353565b9091555050601c54602054612839908361331a565b6128439190613331565b602460008282546128549190613353565b90915550505b801561286b5761286b873083612bcb565b61287581866133ee565b94505b612883878787612bcb565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b08282612d20565b33600090815260256020526040812054819060ff166129845760006024541180156128ef57506024546128ec3061112b565b10155b156129005761290033602454612d83565b50600060248190556001906129143061112b565b9050600060235460215460225461292b9190613353565b6129359190613353565b9050811580612942575080155b156129535760009350505050610cb8565b600b5461296190600761331a565b82111561297957600b5461297690600761331a565b91505b829350505050610cb8565b600061298f3061112b565b11156129b857836000036129aa5750601382905560006129b8565b6129b48585612d83565b5060005b60006129143061112b565b60006024541180156129df57506024546129dc3061112b565b10155b156129f0576129f030602454612d83565b60006024819055612a003061112b565b90506000602354602154602254612a179190613353565b612a219190613353565b9050811580612a2e575080155b15612a37575050565b600b54612a4590600961331a565b821115612a5d57600b54612a5a90600961331a565b91505b600060028260225485612a70919061331a565b612a7a9190613331565b612a849190613331565b9050612a98612a9382856133ee565b612ead565b60225447908190600090612aae90600290613331565b612ab890866133ee565b602154612ac5908561331a565b612acf9190613331565b905060006002602254612ae29190613331565b612aec90876133ee565b602354612af9908661331a565b612b039190613331565b9050612b0f8183613353565b612b1990846133ee565b600060228190556021819055602381905560245592508415801590612b3e5750600083115b15612b4d57612b4d8584613007565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b87573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612bc1573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612bf15760405162461bcd60e51b8152600401610c9c90613366565b6001600160a01b038216612c175760405162461bcd60e51b8152600401610c9c906133ab565b6001600160a01b03831660009081526020819052604090205481811015612c8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612cc6908490613353565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612de35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612e575760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c71565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ee257612ee2613401565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5f9190613417565b81600181518110612f7257612f72613401565b6001600160a01b039283166020918202929092010152600954612f989130911684611b59565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fd1908590600090869030904290600401613434565b600060405180830381600087803b158015612feb57600080fd5b505af1158015612fff573d6000803e3d6000fd5b505050505050565b60095461301f9030906001600160a01b031684611b59565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561308d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130b291906134a5565b5050505050565b600060208083528351808285015260005b818110156130e6578581018301518582016040015282016130ca565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461311c57600080fd5b50565b6000806040838503121561313257600080fd5b823561313d81613107565b946020939093013593505050565b60008060006060848603121561316057600080fd5b833561316b81613107565b9250602084013561317b81613107565b929592945050506040919091013590565b60006020828403121561319e57600080fd5b8135610cb881613107565b6000602082840312156131bb57600080fd5b5035919050565b600080600080608085870312156131d857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561320757600080fd5b823561321281613107565b91506020830135801515811461322757600080fd5b809150509250929050565b60008060006060848603121561324757600080fd5b833561325281613107565b95602085013595506040909401359392505050565b6000806040838503121561327a57600080fd5b823561328581613107565b9150602083013561322781613107565b600181811c908216806132a957607f821691505b6020821081036132c957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613304565b60008261334e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613304565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613304565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561342957600080fd5b8151610cb881613107565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134845784516001600160a01b03168352938301939183019160010161345f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134ba57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220769b4c6c395b5e00bdc58a9a31c2534feffdaee352db4d78f098b564964c699364736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063e7ad9fcd1161007a578063e7ad9fcd14610ae4578063e884f26014610b04578063f11a24d314610b19578063f2fde38b14610b2f578063f637434214610b4f57600080fd5b8063dd62ed3e14610a5c578063e2f4560514610aa2578063e611bfdb14610ab8578063e71dc3f514610ace57600080fd5b8063cd51e6d4116100e7578063cd51e6d4146109f0578063d257b34f14610a06578063d85ba06314610a26578063dc3f0d0f14610a3c57600080fd5b8063c024666814610976578063c18bc19514610996578063c5b45ec0146109b6578063c876d0b9146109d657600080fd5b8063a457c2d711610190578063abe43b1b1161015f578063abe43b1b146108fa578063adb873bd14610911578063b62496f514610927578063bbc0c7421461095757600080fd5b8063a457c2d714610884578063a5ece941146108a4578063a9059cbb146108c4578063aa4bde28146108e457600080fd5b80639c3b4fdc116101cc5780639c3b4fdc146108225780639d2e1ee1146108385780639fccce3214610858578063a0d82dc51461086e57600080fd5b80638da5cb5b146107b957806392136913146107d757806395d89b41146107ed5780639a7a23d61461080257600080fd5b80634049a286116102ed57806370a08231116102805780637bce5a041161024f5780637bce5a041461073d578063808a545714610753578063882c3d981461077357806388e765ff146107a357600080fd5b806370a08231146106d3578063715018a6146106f3578063751039fc146107085780637571336a1461071d57600080fd5b806366d602ae116102bc57806366d602ae146106715780636a486a8e146106875780636b0a894c1461069d5780636ddd1713146106b357600080fd5b80634049a286146105e75780634a62bb651461060757806359d24b8e146106215780636220a12f1461065157600080fd5b806328526adb11610365578063313ce56711610334578063313ce5671461057657806339509351146105925780633ad10ef6146105b25780633dd5b2da146105d257600080fd5b806328526adb146104f2578063293230b81461051f5780632be32b61146105365780632e6ed7ef1461055657600080fd5b80631a8145bb116103a15780631a8145bb146104905780631d777856146104a65780631f3fed8f146104bc57806323b872dd146104d257600080fd5b806306fdde03146103de5780630758d92414610409578063095ea7b31461044157806318160ddd1461047157600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610b65565b60405161040091906130b9565b60405180910390f35b34801561041557600080fd5b50600954610429906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b34801561044d57600080fd5b5061046161045c36600461311f565b610bf7565b6040519015158152602001610400565b34801561047d57600080fd5b506002545b604051908152602001610400565b34801561049c57600080fd5b5061048260225481565b3480156104b257600080fd5b5061048260245481565b3480156104c857600080fd5b5061048260215481565b3480156104de57600080fd5b506104616104ed36600461314b565b610c0e565b3480156104fe57600080fd5b5061048261050d36600461318c565b60116020526000908152604090205481565b34801561052b57600080fd5b50610534610cbf565b005b34801561054257600080fd5b506105346105513660046131a9565b610d81565b34801561056257600080fd5b506105346105713660046131c2565b610e8e565b34801561058257600080fd5b5060405160128152602001610400565b34801561059e57600080fd5b506104616105ad36600461311f565b610f31565b3480156105be57600080fd5b50600d54610429906001600160a01b031681565b3480156105de57600080fd5b50610534610f6d565b3480156105f357600080fd5b5061053461060236600461318c565b610fd9565b34801561061357600080fd5b506014546104619060ff1681565b34801561062d57600080fd5b5061046161063c36600461318c565b60106020526000908152604090205460ff1681565b34801561065d57600080fd5b5061053461066c36600461318c565b61107b565b34801561067d57600080fd5b5061048260075481565b34801561069357600080fd5b5061048260175481565b3480156106a957600080fd5b5061048260125481565b3480156106bf57600080fd5b506014546104619062010000900460ff1681565b3480156106df57600080fd5b506104826106ee36600461318c565b61112b565b3480156106ff57600080fd5b50610534611146565b34801561071457600080fd5b506105346111ba565b34801561072957600080fd5b506105346107383660046131f4565b611221565b34801561074957600080fd5b50610482601d5481565b34801561075f57600080fd5b50600a54610429906001600160a01b031681565b34801561077f57600080fd5b5061046161078e36600461318c565b60266020526000908152604090205460ff1681565b3480156107af57600080fd5b5061048260065481565b3480156107c557600080fd5b506005546001600160a01b0316610429565b3480156107e357600080fd5b5061048260185481565b3480156107f957600080fd5b506103f36112e9565b34801561080e57600080fd5b5061053461081d3660046131f4565b6112f8565b34801561082e57600080fd5b50610482601f5481565b34801561084457600080fd5b50610534610853366004613232565b6113ec565b34801561086457600080fd5b5061048260235481565b34801561087a57600080fd5b50610482601a5481565b34801561089057600080fd5b5061046161089f36600461311f565b6114c3565b3480156108b057600080fd5b50600c54610429906001600160a01b031681565b3480156108d057600080fd5b506104616108df36600461311f565b61155c565b3480156108f057600080fd5b5061048260085481565b34801561090657600080fd5b50600f544310610461565b34801561091d57600080fd5b50610482601b5481565b34801561093357600080fd5b5061046161094236600461318c565b60276020526000908152604090205460ff1681565b34801561096357600080fd5b5060145461046190610100900460ff1681565b34801561098257600080fd5b506105346109913660046131f4565b611569565b3480156109a257600080fd5b506105346109b13660046131a9565b6115f2565b3480156109c257600080fd5b506105346109d136600461318c565b6116fb565b3480156109e257600080fd5b506016546104619060ff1681565b3480156109fc57600080fd5b50610482600e5481565b348015610a1257600080fd5b50610534610a213660046131a9565b611746565b348015610a3257600080fd5b50610482601c5481565b348015610a4857600080fd5b50610534610a573660046131a9565b611891565b348015610a6857600080fd5b50610482610a77366004613267565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aae57600080fd5b50610482600b5481565b348015610ac457600080fd5b50610482600f5481565b348015610ada57600080fd5b5061048260205481565b348015610af057600080fd5b50610534610aff3660046131c2565b611998565b348015610b1057600080fd5b50610534611a38565b348015610b2557600080fd5b50610482601e5481565b348015610b3b57600080fd5b50610534610b4a36600461318c565b611a6e565b348015610b5b57600080fd5b5061048260195481565b606060038054610b7490613295565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613295565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c04338484611b59565b5060015b92915050565b6000610c1b848484611c7e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ca55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cb28533858403611b59565b60019150505b9392505050565b6005546001600160a01b03163314610ce95760405162461bcd60e51b8152600401610c9c906132cf565b601454610100900460ff1615610d415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c9c565b6014805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b03163314610dab5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e8610dc060025490565b610dcb90600261331a565b610dd59190613331565b610ddf9190613331565b811015610e405760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c9c565b610e5281670de0b6b3a764000061331a565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610eb85760405162461bcd60e51b8152600401610c9c906132cf565b601d849055601e839055601f82905560208190558082610ed88587613353565b610ee29190613353565b610eec9190613353565b601c81905560031015610f2b5760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610c9c565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c04918590610f68908690613353565b611b59565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610c9c906132cf565b604051600090339047908381818185875af1925050503d8060008114610f2b576040519150601f19603f3d011682016040523d82523d6000602084013e610f2b565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b0381166110595760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c9c565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110a55760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b0381166111095760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c9c565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146111705760405162461bcd60e51b8152600401610c9c906132cf565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146111e45760405162461bcd60e51b8152600401610c9c906132cf565b6002546006556002546007556002546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610c9c906132cf565b806112be57600a546001600160a01b03908116908316036112be5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c9c565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b606060048054610b7490613295565b6005546001600160a01b031633146113225760405162461bcd60e51b8152600401610c9c906132cf565b600a546001600160a01b03908116908316036113a65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c9c565b6113b0828261288c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600b546113f83061112b565b10156114525760405162461bcd60e51b8152602060048201526024808201527f6d757374206265206f766572207468616e2073776170546f6b656e734174416d6044820152631bdd5b9d60e21b6064820152608401610c9c565b61145d8383836128ba565b156114be57600a805460ff60a01b1916600160a01b17905561147d6129c3565b600a805460ff60a01b191690556040514281527f33078b6055020cda124818ab12f5c776f0307fbb4c6b2f62b232a83d8ae9838a9060200160405180910390a15b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115455760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c9c565b6115523385858403611b59565b5060019392505050565b6000610c04338484611c7e565b6005546001600160a01b031633146115935760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461161c5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e861163160025490565b61163c90600361331a565b6116469190613331565b6116509190613331565b8110156116b45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c9c565b6116c681670de0b6b3a764000061331a565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e83565b6005546001600160a01b031633146117255760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b03166000908152601060205260409020805460ff19169055565b6005546001600160a01b031633146117705760405162461bcd60e51b8152600401610c9c906132cf565b620186a061177d60025490565b61178890600161331a565b6117929190613331565b8110156117ff5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c9c565b6103e861180b60025490565b61181690600161331a565b6118209190613331565b81111561188c5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c9c565b600b55565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610c9c906132cf565b670de0b6b3a76400006103e86118d060025490565b6118db90600261331a565b6118e59190613331565b6118ef9190613331565b8110156119515760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c9c565b61196381670de0b6b3a764000061331a565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e83565b6005546001600160a01b031633146119c25760405162461bcd60e51b8152600401610c9c906132cf565b60188490556019839055601a829055601b81905580826119e28587613353565b6119ec9190613353565b6119f69190613353565b601781905560031015610f2b5760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610c9c565b6005546001600160a01b03163314611a625760405162461bcd60e51b8152600401610c9c906132cf565b6016805460ff19169055565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610c9c906132cf565b6001600160a01b038116611afd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611bbb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9c565b6001600160a01b038216611c1c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c9c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ca45760405162461bcd60e51b8152600401610c9c90613366565b6001600160a01b038216611cca5760405162461bcd60e51b8152600401610c9c906133ab565b60008111611d1a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c9c565b601454610100900460ff16611dad576001600160a01b03831660009081526025602052604090205460ff1680611d6857506001600160a01b03821660009081526025602052604090205460ff165b611dad5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c9c565b600f5415611e57576001600160a01b03831660009081526010602052604090205460ff161580611dea57506005546001600160a01b038381169116145b80611dff57506001600160a01b03821661dead145b611e575760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610c9c565b60145460ff16156122e6576005546001600160a01b03848116911614801590611e8e57506005546001600160a01b03838116911614155b8015611ea257506001600160a01b03821615155b8015611eb957506001600160a01b03821661dead14155b8015611ede57506001600160a01b03831660009081526025602052604090205460ff16155b8015611f0357506001600160a01b03821660009081526025602052604090205460ff16155b156120c15760165460ff16156120c1576009546001600160a01b03838116911614801590611f3f5750600a546001600160a01b03838116911614155b1561202057611f4f6002436133ee565b32600090815260156020526040902054108015611f8d5750611f726002436133ee565b6001600160a01b038316600090815260156020526040902054105b611ff75760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c9c565b3260009081526015602052604080822043908190556001600160a01b03851683529120556120c1565b600a54600160a01b900460ff1615801561205357506001600160a01b03831660009081526027602052604090205460ff16155b156120c1576013546001600160a01b038416600090815260116020526040902054116120c15760405162461bcd60e51b815260206004820152601c60248201527f5f7472616e736665723a3a2054727920616761696e206c617465722e000000006044820152606401610c9c565b6001600160a01b03831660009081526027602052604090205460ff16801561210257506001600160a01b03821660009081526026602052604090205460ff16155b156121d35760065481111561216a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c9c565b6008546121768361112b565b6121809083613353565b11156121ce5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610c9c565b6122e6565b6001600160a01b03821660009081526027602052604090205460ff16801561221457506001600160a01b03831660009081526026602052604090205460ff16155b1561227e576007548111156121ce5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c9c565b6001600160a01b03821660009081526026602052604090205460ff166122aa576008546121768361112b565b600a54600160a01b900460ff161580156122dc57506001600160a01b03831660009081526026602052604090205460ff165b156122e657426013555b60006122f13061112b565b600b5490915081108015908190612310575060145462010000900460ff165b80156123265750600a54600160a01b900460ff16155b801561234b57506001600160a01b03851660009081526027602052604090205460ff16155b801561237057506001600160a01b03851660009081526025602052604090205460ff16155b801561239557506001600160a01b03841660009081526025602052604090205460ff16155b156123c357600a805460ff60a01b1916600160a01b1790556123b56129c3565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff168061240557506001600160a01b03851660009081526025602052604090205460ff165b1561240e575060005b6001600160a01b03861660009081526027602052604090205460ff16801561244c57506001600160a01b038516600090815260116020526040902054155b1561247d5761245a8561112b565b60000361247d576001600160a01b03851660009081526011602052604090204290555b6000811561287857600f54431080156124ae57506001600160a01b03871660009081526027602052604090205460ff165b80156124d357506001600160a01b03861660009081526027602052604090205460ff16155b80156124e157506000601c54115b15612661576001600160a01b03861660009081526010602052604090205460ff16612581576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601280549192909161253f908490613353565b90915550506040516001600160a01b03871681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b606461258e86606361331a565b6125989190613331565b9050601c54601e54826125ab919061331a565b6125b59190613331565b602260008282546125c69190613353565b9091555050601c54601d546125db908361331a565b6125e59190613331565b602160008282546125f69190613353565b9091555050601c54601f5461260b908361331a565b6126159190613331565b602360008282546126269190613353565b9091555050601c5460205461263b908361331a565b6126459190613331565b602460008282546126569190613353565b9091555061285a9050565b6001600160a01b03861660009081526027602052604090205460ff16801561268b57506000601754115b1561274d576064601754866126a0919061331a565b6126aa9190613331565b9050601754601954826126bd919061331a565b6126c79190613331565b602260008282546126d89190613353565b90915550506017546018546126ed908361331a565b6126f79190613331565b602160008282546127089190613353565b9091555050601754601a5461271d908361331a565b6127279190613331565b602360008282546127389190613353565b9091555050601754601b5461263b908361331a565b6001600160a01b03871660009081526027602052604090205460ff16801561277757506000601c54115b1561285a576064601c548661278c919061331a565b6127969190613331565b9050601c54601e54826127a9919061331a565b6127b39190613331565b602260008282546127c49190613353565b9091555050601c54601d546127d9908361331a565b6127e39190613331565b602160008282546127f49190613353565b9091555050601c54601f54612809908361331a565b6128139190613331565b602360008282546128249190613353565b9091555050601c54602054612839908361331a565b6128439190613331565b602460008282546128549190613353565b90915550505b801561286b5761286b873083612bcb565b61287581866133ee565b94505b612883878787612bcb565b50505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556113b08282612d20565b33600090815260256020526040812054819060ff166129845760006024541180156128ef57506024546128ec3061112b565b10155b156129005761290033602454612d83565b50600060248190556001906129143061112b565b9050600060235460215460225461292b9190613353565b6129359190613353565b9050811580612942575080155b156129535760009350505050610cb8565b600b5461296190600761331a565b82111561297957600b5461297690600761331a565b91505b829350505050610cb8565b600061298f3061112b565b11156129b857836000036129aa5750601382905560006129b8565b6129b48585612d83565b5060005b60006129143061112b565b60006024541180156129df57506024546129dc3061112b565b10155b156129f0576129f030602454612d83565b60006024819055612a003061112b565b90506000602354602154602254612a179190613353565b612a219190613353565b9050811580612a2e575080155b15612a37575050565b600b54612a4590600961331a565b821115612a5d57600b54612a5a90600961331a565b91505b600060028260225485612a70919061331a565b612a7a9190613331565b612a849190613331565b9050612a98612a9382856133ee565b612ead565b60225447908190600090612aae90600290613331565b612ab890866133ee565b602154612ac5908561331a565b612acf9190613331565b905060006002602254612ae29190613331565b612aec90876133ee565b602354612af9908661331a565b612b039190613331565b9050612b0f8183613353565b612b1990846133ee565b600060228190556021819055602381905560245592508415801590612b3e5750600083115b15612b4d57612b4d8584613007565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612b87573d6000803e3d6000fd5b50600c546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612bc1573d6000803e3d6000fd5b5050505050505050565b6001600160a01b038316612bf15760405162461bcd60e51b8152600401610c9c90613366565b6001600160a01b038216612c175760405162461bcd60e51b8152600401610c9c906133ab565b6001600160a01b03831660009081526020819052604090205481811015612c8f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c9c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612cc6908490613353565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d1291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038216612de35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c9c565b6001600160a01b03821660009081526020819052604090205481811015612e575760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c9c565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611c71565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ee257612ee2613401565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5f9190613417565b81600181518110612f7257612f72613401565b6001600160a01b039283166020918202929092010152600954612f989130911684611b59565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612fd1908590600090869030904290600401613434565b600060405180830381600087803b158015612feb57600080fd5b505af1158015612fff573d6000803e3d6000fd5b505050505050565b60095461301f9030906001600160a01b031684611b59565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561308d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130b291906134a5565b5050505050565b600060208083528351808285015260005b818110156130e6578581018301518582016040015282016130ca565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461311c57600080fd5b50565b6000806040838503121561313257600080fd5b823561313d81613107565b946020939093013593505050565b60008060006060848603121561316057600080fd5b833561316b81613107565b9250602084013561317b81613107565b929592945050506040919091013590565b60006020828403121561319e57600080fd5b8135610cb881613107565b6000602082840312156131bb57600080fd5b5035919050565b600080600080608085870312156131d857600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561320757600080fd5b823561321281613107565b91506020830135801515811461322757600080fd5b809150509250929050565b60008060006060848603121561324757600080fd5b833561325281613107565b95602085013595506040909401359392505050565b6000806040838503121561327a57600080fd5b823561328581613107565b9150602083013561322781613107565b600181811c908216806132a957607f821691505b6020821081036132c957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0857610c08613304565b60008261334e57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c0857610c08613304565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c0857610c08613304565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561342957600080fd5b8151610cb881613107565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134845784516001600160a01b03168352938301939183019160010161345f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156134ba57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220769b4c6c395b5e00bdc58a9a31c2534feffdaee352db4d78f098b564964c699364736f6c63430008120033

Deployed Bytecode Sourcemap

8252:20326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2820:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8403:27;;;;;;;;;;-1:-1:-1;8403:27:0;;;;-1:-1:-1;;;;;8403:27:0;;;;;;-1:-1:-1;;;;;748:32:1;;;730:51;;718:2;703:18;8403:27:0;567:220:1;3800:194:0;;;;;;;;;;-1:-1:-1;3800:194:0;;;;;:::i;:::-;;:::i;:::-;;;1413:14:1;;1406:22;1388:41;;1376:2;1361:18;3800:194:0;1248:187:1;3141:108:0;;;;;;;;;;-1:-1:-1;3229:12:0;;3141:108;;;1586:25:1;;;1574:2;1559:18;3141:108:0;1440:177:1;9505:33:0;;;;;;;;;;;;;;;;9579:28;;;;;;;;;;;;;;;;9465:33;;;;;;;;;;;;;;;;4002:529;;;;;;;;;;-1:-1:-1;4002:529:0;;;;;:::i;:::-;;:::i;8742:64::-;;;;;;;;;;-1:-1:-1;8742:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;12573:242;;;;;;;;;;;;;:::i;:::-;;13917:312;;;;;;;;;;-1:-1:-1;13917:312:0;;;;;:::i;:::-;;:::i;16442:504::-;;;;;;;;;;-1:-1:-1;16442:504:0;;;;;:::i;:::-;;:::i;3040:93::-;;;;;;;;;;-1:-1:-1;3040:93:0;;3123:2;3052:36:1;;3040:2;3025:18;3040:93:0;2910:184:1;4539:290:0;;;;;;;;;;-1:-1:-1;4539:290:0;;;;;:::i;:::-;;:::i;8578:25::-;;;;;;;;;;-1:-1:-1;8578:25:0;;;;-1:-1:-1;;;;;8578:25:0;;;27882:188;;;;;;;;;;;;;:::i;28372:203::-;;;;;;;;;;-1:-1:-1;28372:203:0;;;;;:::i;:::-;;:::i;8877:33::-;;;;;;;;;;-1:-1:-1;8877:33:0;;;;;;;;8688:47;;;;;;;;;;-1:-1:-1;8688:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28078:286;;;;;;;;;;-1:-1:-1;28078:286:0;;;;;:::i;:::-;;:::i;8329:28::-;;;;;;;;;;;;;;;;9114;;;;;;;;;;;;;;;;8813:25;;;;;;;;;;;;;;;;8957:31;;;;;;;;;;-1:-1:-1;8957:31:0;;;;;;;;;;;3257:143;;;;;;;;;;-1:-1:-1;3257:143:0;;;;;:::i;:::-;;:::i;7806:150::-;;;;;;;;;;;;;:::i;12940:203::-;;;;;;;;;;;;;:::i;14960:328::-;;;;;;;;;;-1:-1:-1;14960:328:0;;;;;:::i;:::-;;:::i;9326:30::-;;;;;;;;;;;;;;;;8437:28;;;;;;;;;;-1:-1:-1;8437:28:0;;;;-1:-1:-1;;;;;8437:28:0;;;10423:48;;;;;;;;;;-1:-1:-1;10423:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8295:27;;;;;;;;;;;;;;;;7592:79;;;;;;;;;;-1:-1:-1;7657:6:0;;-1:-1:-1;;;;;7657:6:0;7592:79;;9149:31;;;;;;;;;;;;;;;;2928:104;;;;;;;;;;;;;:::i;15544:364::-;;;;;;;;;;-1:-1:-1;15544:364:0;;;;;:::i;:::-;;:::i;9400:24::-;;;;;;;;;;;;;;;;25828:469;;;;;;;;;;-1:-1:-1;25828:469:0;;;;;:::i;:::-;;:::i;9545:27::-;;;;;;;;;;;;;;;;9225:25;;;;;;;;;;;;;;;;4837:475;;;;;;;;;;-1:-1:-1;4837:475:0;;;;;:::i;:::-;;:::i;8540:31::-;;;;;;;;;;-1:-1:-1;8540:31:0;;;;-1:-1:-1;;;;;8540:31:0;;;3408:200;;;;;;;;;;-1:-1:-1;3408:200:0;;;;;:::i;:::-;;:::i;8364:30::-;;;;;;;;;;;;;;;;23137:113;;;;;;;;;;-1:-1:-1;23228:14:0;;23213:12;:29;23137:113;;9257:26;;;;;;;;;;;;;;;;10478:57;;;;;;;;;;-1:-1:-1;10478:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8917:33;;;;;;;;;;-1:-1:-1;8917:33:0;;;;;;;;;;;16954:182;;;;;;;;;;-1:-1:-1;16954:182:0;;;;;:::i;:::-;;:::i;13257:327::-;;;;;;;;;;-1:-1:-1;13257:327:0;;;;;:::i;:::-;;:::i;12823:109::-;;;;;;;;;;-1:-1:-1;12823:109:0;;;;;:::i;:::-;;:::i;9066:39::-;;;;;;;;;;-1:-1:-1;9066:39:0;;;;;;;;8610:31;;;;;;;;;;;;;;;;14299:428;;;;;;;;;;-1:-1:-1;14299:428:0;;;;;:::i;:::-;;:::i;9292:27::-;;;;;;;;;;;;;;;;13592:317;;;;;;;;;;-1:-1:-1;13592:317:0;;;;;:::i;:::-;;:::i;3616:176::-;;;;;;;;;;-1:-1:-1;3616:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3757:18:0;;;3730:7;3757:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3616:176;8500:33;;;;;;;;;;;;;;;;8648;;;;;;;;;;;;;;;;9431:25;;;;;;;;;;;;;;;;15916:518;;;;;;;;;;-1:-1:-1;15916:518:0;;;;;:::i;:::-;;:::i;13151:98::-;;;;;;;;;;;;;:::i;9363:30::-;;;;;;;;;;;;;;;;7964:281;;;;;;;;;;-1:-1:-1;7964:281:0;;;;;:::i;:::-;;:::i;9187:31::-;;;;;;;;;;;;;;;;2820:100;2874:13;2907:5;2900:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2820:100;:::o;3800:194::-;3908:4;3925:39;2269:10;3948:7;3957:6;3925:8;:39::i;:::-;-1:-1:-1;3982:4:0;3800:194;;;;;:::o;4002:529::-;4142:4;4159:36;4169:6;4177:9;4188:6;4159:9;:36::i;:::-;-1:-1:-1;;;;;4235:19:0;;4208:24;4235:19;;;:11;:19;;;;;;;;2269:10;4235:33;;;;;;;;4301:26;;;;4279:116;;;;-1:-1:-1;;;4279:116:0;;5096:2:1;4279:116:0;;;5078:21:1;5135:2;5115:18;;;5108:30;5174:34;5154:18;;;5147:62;-1:-1:-1;;;5225:18:1;;;5218:38;5273:19;;4279:116:0;;;;;;;;;4431:57;4440:6;2269:10;4481:6;4462:16;:25;4431:8;:57::i;:::-;4519:4;4512:11;;;4002:529;;;;;;:::o;12573:242::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;12636:13:::1;::::0;::::1;::::0;::::1;;;12635:14;12627:50;;;::::0;-1:-1:-1;;;12627:50:0;;5866:2:1;12627:50:0::1;::::0;::::1;5848:21:1::0;5905:2;5885:18;;;5878:30;5944:25;5924:18;;;5917:53;5987:18;;12627:50:0::1;5664:347:1::0;12627:50:0::1;12688:13;:20:::0;;-1:-1:-1;;12719:18:0;;;;;12763:12:::1;12748;:27:::0;12791:16:::1;::::0;::::1;::::0;-1:-1:-1;;12791:16:0::1;12573:242::o:0;13917:312::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;14054:4:::1;14046;14025:13;3229:12:::0;;;3141:108;14025:13:::1;:17;::::0;14041:1:::1;14025:17;:::i;:::-;14024:26;;;;:::i;:::-;14023:35;;;;:::i;:::-;14013:6;:45;;13991:136;;;::::0;-1:-1:-1;;;13991:136:0;;6745:2:1;13991:136:0::1;::::0;::::1;6727:21:1::0;6784:2;6764:18;;;6757:30;6823:34;6803:18;;;6796:62;-1:-1:-1;;;6874:18:1;;;6867:39;6923:19;;13991:136:0::1;6543:405:1::0;13991:136:0::1;14153:19;:6:::0;14163:8:::1;14153:19;:::i;:::-;14138:12;:34:::0;;;14188:33:::1;::::0;1586:25:1;;;14188:33:0::1;::::0;1574:2:1;1559:18;14188:33:0::1;;;;;;;;13917:312:::0;:::o;16442:504::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;16619:15:::1;:31:::0;;;16661:15:::1;:31:::0;;;16703:9:::1;:19:::0;;;16733:10:::1;:21:::0;;;16746:8;16715:7;16793:46:::1;16679:13:::0;16637;16793:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16765:12;:125:::0;;;16925:1:::1;-1:-1:-1::0;16909:17:0::1;16901:37;;;::::0;-1:-1:-1;;;16901:37:0;;7285:2:1;16901:37:0::1;::::0;::::1;7267:21:1::0;7324:1;7304:18;;;7297:29;-1:-1:-1;;;7342:18:1;;;7335:37;7389:18;;16901:37:0::1;7083:330:1::0;16901:37:0::1;16442:504:::0;;;;:::o;4539:290::-;2269:10;4652:4;4741:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4741:34:0;;;;;;;;;;4652:4;;4669:130;;4719:7;;4741:47;;4778:10;;4741:47;:::i;:::-;4669:8;:130::i;27882:188::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;27980:82:::1;::::0;27943:12:::1;::::0;27988:10:::1;::::0;28012:21:::1;::::0;27943:12;27980:82;27943:12;27980:82;28012:21;27988:10;27980:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28372:203:::0;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28462:25:0;::::1;28454:69;;;::::0;-1:-1:-1;;;28454:69:0;;7830:2:1;28454:69:0::1;::::0;::::1;7812:21:1::0;7869:2;7849:18;;;7842:30;7908:33;7888:18;;;7881:61;7959:18;;28454:69:0::1;7628:355:1::0;28454:69:0::1;28534:10;:33:::0;;-1:-1:-1;;;;;;28534:33:0::1;-1:-1:-1::0;;;;;28534:33:0;;;::::1;::::0;;;::::1;::::0;;28372:203::o;28078:286::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28204:31:0;::::1;28182:118;;;::::0;-1:-1:-1;;;28182:118:0;;8190:2:1;28182:118:0::1;::::0;::::1;8172:21:1::0;8229:2;8209:18;;;8202:30;8268:34;8248:18;;;8241:62;-1:-1:-1;;;8319:18:1;;;8312:35;8364:19;;28182:118:0::1;7988:401:1::0;28182:118:0::1;28311:16;:45:::0;;-1:-1:-1;;;;;;28311:45:0::1;-1:-1:-1::0;;;;;28311:45:0;;;::::1;::::0;;;::::1;::::0;;28078:286::o;3257:143::-;-1:-1:-1;;;;;3374:18:0;3347:7;3374:18;;;;;;;;;;;;3257:143::o;7806:150::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;7899:6:::1;::::0;7878:40:::1;::::0;7915:1:::1;::::0;-1:-1:-1;;;;;7899:6:0::1;::::0;7878:40:::1;::::0;7915:1;;7878:40:::1;7929:6;:19:::0;;-1:-1:-1;;;;;;7929:19:0::1;::::0;;7806:150::o;12940:203::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;3229:12;;12994::::1;:28:::0;3229:12;;13033:13:::1;:29:::0;3229:12;;13073:15:::1;:31:::0;13120:15:::1;::::0;::::1;::::0;;;::::1;12940:203::o:0;14960:328::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;15082:4:::1;15077:162;;15139:13;::::0;-1:-1:-1;;;;;15139:13:0;;::::1;15129:23:::0;;::::1;::::0;15103:124:::1;;;::::0;-1:-1:-1;;;15103:124:0;;8596:2:1;15103:124:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;8674:34;8654:18;;;8647:62;-1:-1:-1;;;8725:18:1;;;8718:37;8772:19;;15103:124:0::1;8394:403:1::0;15103:124:0::1;-1:-1:-1::0;;;;;15249:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;15249:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14960:328::o;2928:104::-;2984:13;3017:7;3010:14;;;;;:::i;15544:364::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;15692:13:::1;::::0;-1:-1:-1;;;;;15692:13:0;;::::1;15684:21:::0;;::::1;::::0;15662:128:::1;;;::::0;-1:-1:-1;;;15662:128:0;;9004:2:1;15662:128:0::1;::::0;::::1;8986:21:1::0;9043:2;9023:18;;;9016:30;9082:34;9062:18;;;9055:62;9153:27;9133:18;;;9126:55;9198:19;;15662:128:0::1;8802:421:1::0;15662:128:0::1;15803:41;15832:4;15838:5;15803:28;:41::i;:::-;15860:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;15860:40:0;::::1;::::0;::::1;::::0;;;::::1;15544:364:::0;;:::o;25828:469::-;26003:18;;25975:24;25993:4;25975:9;:24::i;:::-;:46;;25953:132;;;;-1:-1:-1;;;25953:132:0;;9430:2:1;25953:132:0;;;9412:21:1;9469:2;9449:18;;;9442:30;9508:34;9488:18;;;9481:62;-1:-1:-1;;;9559:18:1;;;9552:34;9603:19;;25953:132:0;9228:400:1;25953:132:0;26100:43;26121:4;26127:5;26134:8;26100:20;:43::i;:::-;26096:194;;;26160:8;:15;;-1:-1:-1;;;;26160:15:0;-1:-1:-1;;;26160:15:0;;;26190:10;:8;:10::i;:::-;26215:8;:16;;-1:-1:-1;;;;26215:16:0;;;26251:27;;26262:15;1586:25:1;;26251:27:0;;1574:2:1;1559:18;26251:27:0;;;;;;;26096:194;25828:469;;;:::o;4837:475::-;2269:10;4955:4;4999:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4999:34:0;;;;;;;;;;5066:35;;;;5044:122;;;;-1:-1:-1;;;5044:122:0;;9835:2:1;5044:122:0;;;9817:21:1;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:1;;;9957:35;10009:19;;5044:122:0;9633:401:1;5044:122:0;5202:67;2269:10;5225:7;5253:15;5234:16;:34;5202:8;:67::i;:::-;-1:-1:-1;5300:4:0;;4837:475;-1:-1:-1;;;4837:475:0:o;3408:200::-;3519:4;3536:42;2269:10;3560:9;3571:6;3536:9;:42::i;16954:182::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17039:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17039:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17094:34;;1388:41:1;;;17094:34:0::1;::::0;1361:18:1;17094:34:0::1;;;;;;;16954:182:::0;;:::o;13257:327::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;13397:4:::1;13389;13368:13;3229:12:::0;;;3141:108;13368:13:::1;:17;::::0;13384:1:::1;13368:17;:::i;:::-;13367:26;;;;:::i;:::-;13366:35;;;;:::i;:::-;13356:6;:45;;13334:139;;;::::0;-1:-1:-1;;;13334:139:0;;10241:2:1;13334:139:0::1;::::0;::::1;10223:21:1::0;10280:2;10260:18;;;10253:30;10319:34;10299:18;;;10292:62;-1:-1:-1;;;10370:18:1;;;10363:42;10422:19;;13334:139:0::1;10039:408:1::0;13334:139:0::1;13502:19;:6:::0;13512:8:::1;13502:19;:::i;:::-;13484:15;:37:::0;;;13537:39:::1;::::0;1586:25:1;;;13537:39:0::1;::::0;1574:2:1;1559:18;13537:39:0::1;1440:177:1::0;12823:109:0;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12893:23:0::1;12919:5;12893:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;12893:31:0::1;::::0;;12823:109::o;14299:428::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;14439:6:::1;14418:13;3229:12:::0;;;3141:108;14418:13:::1;:17;::::0;14434:1:::1;14418:17;:::i;:::-;14417:28;;;;:::i;:::-;14404:9;:41;;14382:144;;;::::0;-1:-1:-1;;;14382:144:0;;10654:2:1;14382:144:0::1;::::0;::::1;10636:21:1::0;10693:2;10673:18;;;10666:30;10732:34;10712:18;;;10705:62;-1:-1:-1;;;10783:18:1;;;10776:51;10844:19;;14382:144:0::1;10452:417:1::0;14382:144:0::1;14594:4;14573:13;3229:12:::0;;;3141:108;14573:13:::1;:17;::::0;14589:1:::1;14573:17;:::i;:::-;14572:26;;;;:::i;:::-;14559:9;:39;;14537:141;;;::::0;-1:-1:-1;;;14537:141:0;;11076:2:1;14537:141:0::1;::::0;::::1;11058:21:1::0;11115:2;11095:18;;;11088:30;11154:34;11134:18;;;11127:62;-1:-1:-1;;;11205:18:1;;;11198:50;11265:19;;14537:141:0::1;10874:416:1::0;14537:141:0::1;14689:18;:30:::0;14299:428::o;13592:317::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;13730:4:::1;13722;13701:13;3229:12:::0;;;3141:108;13701:13:::1;:17;::::0;13717:1:::1;13701:17;:::i;:::-;13700:26;;;;:::i;:::-;13699:35;;;;:::i;:::-;13689:6;:45;;13667:137;;;::::0;-1:-1:-1;;;13667:137:0;;11497:2:1;13667:137:0::1;::::0;::::1;11479:21:1::0;11536:2;11516:18;;;11509:30;11575:34;11555:18;;;11548:62;-1:-1:-1;;;11626:18:1;;;11619:40;11676:19;;13667:137:0::1;11295:406:1::0;13667:137:0::1;13831:19;:6:::0;13841:8:::1;13831:19;:::i;:::-;13815:13;:35:::0;;;13866::::1;::::0;1586:25:1;;;13866:35:0::1;::::0;1574:2:1;1559:18;13866:35:0::1;1440:177:1::0;15916:518:0;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;16094:16:::1;:32:::0;;;16137:16:::1;:32:::0;;;16180:10:::1;:20:::0;;;16211:11:::1;:22:::0;;;16225:8;16193:7;16273:48:::1;16156:13:::0;16113;16273:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;16244:13;:130:::0;;;16410:1:::1;-1:-1:-1::0;16393:18:0::1;16385:41;;;::::0;-1:-1:-1;;;16385:41:0;;11908:2:1;16385:41:0::1;::::0;::::1;11890:21:1::0;11947:2;11927:18;;;11920:30;-1:-1:-1;;;11966:18:1;;;11959:40;12016:18;;16385:41:0::1;11706:334:1::0;13151:98:0;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;13213:20:::1;:28:::0;;-1:-1:-1;;13213:28:0::1;::::0;;13151:98::o;7964:281::-;7719:6;;-1:-1:-1;;;;;7719:6:0;2269:10;7719:22;7711:67;;;;-1:-1:-1;;;7711:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8067:22:0;::::1;8045:110;;;::::0;-1:-1:-1;;;8045:110:0;;12247:2:1;8045:110:0::1;::::0;::::1;12229:21:1::0;12286:2;12266:18;;;12259:30;12325:34;12305:18;;;12298:62;-1:-1:-1;;;12376:18:1;;;12369:36;12422:19;;8045:110:0::1;12045:402:1::0;8045:110:0::1;8192:6;::::0;8171:38:::1;::::0;-1:-1:-1;;;;;8171:38:0;;::::1;::::0;8192:6:::1;::::0;8171:38:::1;::::0;8192:6:::1;::::0;8171:38:::1;8220:6;:17:::0;;-1:-1:-1;;;;;;8220:17:0::1;-1:-1:-1::0;;;;;8220:17:0;;;::::1;::::0;;;::::1;::::0;;7964:281::o;6861:380::-;-1:-1:-1;;;;;6997:19:0;;6989:68;;;;-1:-1:-1;;;6989:68:0;;12654:2:1;6989:68:0;;;12636:21:1;12693:2;12673:18;;;12666:30;12732:34;12712:18;;;12705:62;-1:-1:-1;;;12783:18:1;;;12776:34;12827:19;;6989:68:0;12452:400:1;6989:68:0;-1:-1:-1;;;;;7076:21:0;;7068:68;;;;-1:-1:-1;;;7068:68:0;;13059:2:1;7068:68:0;;;13041:21:1;13098:2;13078:18;;;13071:30;13137:34;13117:18;;;13110:62;-1:-1:-1;;;13188:18:1;;;13181:32;13230:19;;7068:68:0;12857:398:1;7068:68:0;-1:-1:-1;;;;;7149:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7201:32;;1586:25:1;;;7201:32:0;;1559:18:1;7201:32:0;;;;;;;;6861:380;;;:::o;17144:5985::-;-1:-1:-1;;;;;17276:18:0;;17268:68;;;;-1:-1:-1;;;17268:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17355:16:0;;17347:64;;;;-1:-1:-1;;;17347:64:0;;;;;;;:::i;:::-;17439:1;17430:6;:10;17422:52;;;;-1:-1:-1;;;17422:52:0;;14272:2:1;17422:52:0;;;14254:21:1;14311:2;14291:18;;;14284:30;14350:31;14330:18;;;14323:59;14399:18;;17422:52:0;14070:353:1;17422:52:0;17492:13;;;;;;;17487:183;;-1:-1:-1;;;;;17548:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17577:23:0;;;;;;:19;:23;;;;;;;;17548:52;17522:136;;;;-1:-1:-1;;;17522:136:0;;14630:2:1;17522:136:0;;;14612:21:1;14669:2;14649:18;;;14642:30;-1:-1:-1;;;14688:18:1;;;14681:52;14750:18;;17522:136:0;14428:346:1;17522:136:0;17686:14;;:18;17682:254;;-1:-1:-1;;;;;17748:21:0;;;;;;:15;:21;;;;;;;;17747:22;;:60;;-1:-1:-1;7657:6:0;;-1:-1:-1;;;;;17794:13:0;;;7657:6;;17794:13;17747:60;:106;;;-1:-1:-1;;;;;;17832:21:0;;17846:6;17832:21;17747:106;17721:203;;;;-1:-1:-1;;;17721:203:0;;14981:2:1;17721:203:0;;;14963:21:1;15020:2;15000:18;;;14993:30;15059:34;15039:18;;;15032:62;-1:-1:-1;;;15110:18:1;;;15103:33;15153:19;;17721:203:0;14779:399:1;17721:203:0;17952:14;;;;17948:2363;;;7657:6;;-1:-1:-1;;;;;18005:15:0;;;7657:6;;18005:15;;;;:49;;-1:-1:-1;7657:6:0;;-1:-1:-1;;;;;18041:13:0;;;7657:6;;18041:13;;18005:49;:86;;;;-1:-1:-1;;;;;;18075:16:0;;;;18005:86;:128;;;;-1:-1:-1;;;;;;18112:21:0;;18126:6;18112:21;;18005:128;:175;;;;-1:-1:-1;;;;;;18155:25:0;;;;;;:19;:25;;;;;;;;18154:26;18005:175;:220;;;;-1:-1:-1;;;;;;18202:23:0;;;;;;:19;:23;;;;;;;;18201:24;18005:220;17983:1320;;;18264:20;;;;18260:1028;;;18353:9;;-1:-1:-1;;;;;18339:24:0;;;18353:9;;18339:24;;;;:56;;-1:-1:-1;18381:13:0;;-1:-1:-1;;;;;18367:28:0;;;18381:13;;18367:28;;18339:56;18309:960;;;18559:16;18574:1;18559:12;:16;:::i;:::-;18513:9;18484:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;18680:16:0;18695:1;18680:12;:16;:::i;:::-;-1:-1:-1;;;;;18612:32:0;;;;;;:28;:32;;;;;;:84;18484:212;18446:363;;;;-1:-1:-1;;;18446:363:0;;15518:2:1;18446:363:0;;;15500:21:1;15557:2;15537:18;;;15530:30;15596:34;15576:18;;;15569:62;-1:-1:-1;;;15647:18:1;;;15640:51;15708:19;;18446:363:0;15316:417:1;18446:363:0;18865:9;18836:39;;;;:28;:39;;;;;;18878:12;18836:54;;;;-1:-1:-1;;;;;18917:32:0;;;;;;:47;18309:960;;;18999:8;;-1:-1:-1;;;18999:8:0;;;;18998:9;:45;;;;-1:-1:-1;;;;;;19012:31:0;;;;;;:25;:31;;;;;;;;19011:32;18998:45;18994:275;;;19148:9;;-1:-1:-1;;;;;19110:35:0;;;;;;:29;:35;;;;;;:47;19072:173;;;;-1:-1:-1;;;19072:173:0;;15940:2:1;19072:173:0;;;15922:21:1;15979:2;15959:18;;;15952:30;16018;15998:18;;;15991:58;16066:18;;19072:173:0;15738:352:1;19072:173:0;-1:-1:-1;;;;;19323:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;19359:20:0;;;;;;:16;:20;;;;;;;;19358:21;19323:56;19319:981;;;19440:12;;19430:6;:22;;19400:136;;;;-1:-1:-1;;;19400:136:0;;16297:2:1;19400:136:0;;;16279:21:1;16336:2;16316:18;;;16309:30;16375:34;16355:18;;;16348:62;-1:-1:-1;;;16426:18:1;;;16419:38;16474:19;;19400:136:0;16095:404:1;19400:136:0;19611:15;;19594:13;19604:2;19594:9;:13::i;:::-;19585:22;;:6;:22;:::i;:::-;:41;;19555:139;;;;-1:-1:-1;;;19555:139:0;;16706:2:1;19555:139:0;;;16688:21:1;16745:2;16725:18;;;16718:30;16784:26;16764:18;;;16757:54;16828:18;;19555:139:0;16504:348:1;19555:139:0;19319:981;;;-1:-1:-1;;;;;19738:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;19772:22:0;;;;;;:16;:22;;;;;;;;19771:23;19738:56;19716:584;;;19869:13;;19859:6;:23;;19829:139;;;;-1:-1:-1;;;19829:139:0;;17059:2:1;19829:139:0;;;17041:21:1;17098:2;17078:18;;;17071:30;17137:34;17117:18;;;17110:62;-1:-1:-1;;;17188:18:1;;;17181:40;17238:19;;19829:139:0;16857:406:1;19716:584:0;-1:-1:-1;;;;;19995:20:0;;;;;;:16;:20;;;;;;;;19990:310;;20092:15;;20075:13;20085:2;20075:9;:13::i;19990:310::-;20202:8;;-1:-1:-1;;;20202:8:0;;;;20201:9;:35;;;;-1:-1:-1;;;;;;20214:22:0;;;;;;:16;:22;;;;;;;;20201:35;20197:103;;;20269:15;20257:9;:27;20197:103;20323:28;20354:24;20372:4;20354:9;:24::i;:::-;20430:18;;20323:55;;-1:-1:-1;20406:42:0;;;;;;;20479:35;;-1:-1:-1;20503:11:0;;;;;;;20479:35;:61;;;;-1:-1:-1;20532:8:0;;-1:-1:-1;;;20532:8:0;;;;20531:9;20479:61;:110;;;;-1:-1:-1;;;;;;20558:31:0;;;;;;:25;:31;;;;;;;;20557:32;20479:110;:153;;;;-1:-1:-1;;;;;;20607:25:0;;;;;;:19;:25;;;;;;;;20606:26;20479:153;:194;;;;-1:-1:-1;;;;;;20650:23:0;;;;;;:19;:23;;;;;;;;20649:24;20479:194;20461:322;;;20700:8;:15;;-1:-1:-1;;;;20700:15:0;-1:-1:-1;;;20700:15:0;;;20730:10;:8;:10::i;:::-;20755:8;:16;;-1:-1:-1;;;;20755:16:0;;;20461:322;-1:-1:-1;;;;;20831:25:0;;20795:12;20831:25;;;:19;:25;;;;;;20810:4;;20831:25;;;:52;;-1:-1:-1;;;;;;20860:23:0;;;;;;:19;:23;;;;;;;;20831:52;20827:100;;;-1:-1:-1;20910:5:0;20827:100;-1:-1:-1;;;;;20941:31:0;;;;;;:25;:31;;;;;;;;:73;;;;-1:-1:-1;;;;;;20976:33:0;;;;;;:29;:33;;;;;;:38;20941:73;20937:222;;;21035:22;21053:2;21035:9;:22::i;:::-;21061:1;21035:27;21031:117;;-1:-1:-1;;;;;21081:33:0;;;;;;:29;:33;;;;;21117:15;21081:51;;21031:117;21171:12;21204:7;21200:1876;;;23228:14;;23213:12;:29;21250:73;;;;-1:-1:-1;;;;;;21292:31:0;;;;;;:25;:31;;;;;;;;21250:73;:124;;;;-1:-1:-1;;;;;;21345:29:0;;;;;;:25;:29;;;;;;;;21344:30;21250:124;:161;;;;;21410:1;21395:12;;:16;21250:161;21228:1703;;;-1:-1:-1;;;;;21451:19:0;;;;;;:15;:19;;;;;;;;21446:186;;-1:-1:-1;;;;;21495:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;21495:26:0;21517:4;21495:26;;;;;;21544:10;:15;;21517:4;;21544:10;;:15;;21517:4;;21544:15;:::i;:::-;;;;-1:-1:-1;;21587:25:0;;-1:-1:-1;;;;;748:32:1;;730:51;;21587:25:0;;718:2:1;703:18;21587:25:0;;;;;;;21446:186;21675:3;21660:11;:6;21669:2;21660:11;:::i;:::-;21659:19;;;;:::i;:::-;21652:26;;21746:12;;21727:15;;21720:4;:22;;;;:::i;:::-;21719:39;;;;:::i;:::-;21697:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21826:12:0;;21807:15;;21800:22;;:4;:22;:::i;:::-;21799:39;;;;:::i;:::-;21777:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21894:12:0;;21881:9;;21874:16;;:4;:16;:::i;:::-;21873:33;;;;:::i;:::-;21857:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21964:12:0;;21950:10;;21943:17;;:4;:17;:::i;:::-;21942:34;;;;:::i;:::-;21925:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;21228:1703:0;;-1:-1:-1;21228:1703:0;;-1:-1:-1;;;;;22036:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22085:1;22069:13;;:17;22036:50;22032:899;;;22141:3;22124:13;;22115:6;:22;;;;:::i;:::-;22114:30;;;;:::i;:::-;22107:37;;22213:13;;22193:16;;22186:4;:23;;;;:::i;:::-;22185:41;;;;:::i;:::-;22163:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22295:13:0;;22275:16;;22268:23;;:4;:23;:::i;:::-;22267:41;;;;:::i;:::-;22245:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;22365:13:0;;22351:10;;22344:17;;:4;:17;:::i;:::-;22343:35;;;;:::i;:::-;22327:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22437:13:0;;22422:11;;22415:18;;:4;:18;:::i;22032:899::-;-1:-1:-1;;;;;22509:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;22559:1;22544:12;;:16;22509:51;22505:426;;;22614:3;22598:12;;22589:6;:21;;;;:::i;:::-;22588:29;;;;:::i;:::-;22581:36;;22685:12;;22666:15;;22659:4;:22;;;;:::i;:::-;22658:39;;;;:::i;:::-;22636:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22765:12:0;;22746:15;;22739:22;;:4;:22;:::i;:::-;22738:39;;;;:::i;:::-;22716:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;22833:12:0;;22820:9;;22813:16;;:4;:16;:::i;:::-;22812:33;;;;:::i;:::-;22796:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;22903:12:0;;22889:10;;22882:17;;:4;:17;:::i;:::-;22881:34;;;;:::i;:::-;22864:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;22505:426:0;22949:8;;22945:91;;22978:42;22994:4;23008;23015;22978:15;:42::i;:::-;23050:14;23060:4;23050:14;;:::i;:::-;;;21200:1876;23088:33;23104:4;23110:2;23114:6;23088:15;:33::i;:::-;17257:5872;;;;17144:5985;;;:::o;15296:240::-;-1:-1:-1;;;;;15379:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;15379:39:0;;;;;;;15431;15379:31;:39;15431:26;:39::i;23258:1736::-;23452:10;23387:4;23432:31;;;:19;:31;;;;;;23387:4;;23432:31;;23427:1560;;23518:1;23502:13;;:17;:62;;;;;23551:13;;23523:24;23541:4;23523:9;:24::i;:::-;:41;;23502:62;23480:167;;;23599:32;23605:10;23617:13;;23599:5;:32::i;:::-;-1:-1:-1;23677:1:0;23661:13;:17;;;23703:4;;23748:24;23766:4;23748:9;:24::i;:::-;23722:50;;23787:25;23891:12;;23853:18;;23815;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;23787:116;-1:-1:-1;23922:20:0;;;:46;;-1:-1:-1;23946:22:0;;23922:46;23918:99;;;23996:5;23989:12;;;;;;;23918:99;24053:18;;:22;;24074:1;24053:22;:::i;:::-;24035:15;:40;24031:121;;;24114:18;;:22;;24135:1;24114:22;:::i;:::-;24096:40;;24031:121;24173:7;24166:14;;;;;;;23427:1560;24244:1;24217:24;24235:4;24217:9;:24::i;:::-;:28;24213:290;;;24270:5;24279:1;24270:10;24266:222;;-1:-1:-1;24305:9:0;:20;;;24358:5;24266:222;;;24412:18;24418:4;24424:5;24412;:18::i;:::-;-1:-1:-1;24463:5:0;24266:222;24517:23;24543:24;24561:4;24543:9;:24::i;26305:1569::-;26364:1;26348:13;;:17;:62;;;;;26397:13;;26369:24;26387:4;26369:9;:24::i;:::-;:41;;26348:62;26344:130;;;26427:35;26441:4;26448:13;;26427:5;:35::i;:::-;26500:1;26484:13;:17;;;26538:24;26556:4;26538:9;:24::i;:::-;26512:50;;26573:25;26669:12;;26635:18;;26601;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26573:108;-1:-1:-1;26698:20:0;;;:46;;-1:-1:-1;26722:22:0;;26698:46;26694:85;;;26761:7;;26305:1569::o;26694:85::-;26813:18;;:22;;26834:1;26813:22;:::i;:::-;26795:15;:40;26791:113;;;26870:18;;:22;;26891:1;26870:22;:::i;:::-;26852:40;;26791:113;26916:23;27016:1;26996:17;26961:18;;26943:15;:36;;;;:::i;:::-;26942:71;;;;:::i;:::-;:75;;;;:::i;:::-;26916:101;-1:-1:-1;27030:51:0;27047:33;26916:101;27047:15;:33;:::i;:::-;27030:16;:51::i;:::-;27291:18;;27115:21;;;;27094:18;;27291:22;;27312:1;;27291:22;:::i;:::-;27270:44;;:17;:44;:::i;:::-;27234:18;;27221:31;;:10;:31;:::i;:::-;27220:95;;;;:::i;:::-;27194:121;;27326:17;27432:1;27411:18;;:22;;;;:::i;:::-;27390:44;;:17;:44;:::i;:::-;27360:12;;27347:25;;:10;:25;:::i;:::-;27346:89;;;;:::i;:::-;27326:109;-1:-1:-1;27465:27:0;27326:109;27465:15;:27;:::i;:::-;27446:46;;;;:::i;:::-;27524:1;27503:18;:22;;;27536:18;:22;;;27569:12;:16;;;27596:13;:17;27446:46;-1:-1:-1;27630:19:0;;;;;:42;;;27671:1;27653:15;:19;27630:42;27626:121;;;27689:46;27702:15;27719;27689:12;:46::i;:::-;27767:10;;27759:39;;-1:-1:-1;;;;;27767:10:0;;;;27759:39;;;;;27788:9;;27767:10;27759:39;27767:10;27759:39;27788:9;27767:10;27759:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27817:16:0;;27809:57;;-1:-1:-1;;;;;27817:16:0;;;;27844:21;27809:57;;;;;27817:16;27809:57;27817:16;27809:57;27844:21;27817:16;27809:57;;;;;;;;;;;;;;;;;;;;;26333:1541;;;;;;;26305:1569::o;5320:651::-;-1:-1:-1;;;;;5460:20:0;;5452:70;;;;-1:-1:-1;;;5452:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5541:23:0;;5533:71;;;;-1:-1:-1;;;5533:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5641:17:0;;5617:21;5641:17;;;;;;;;;;;5691:23;;;;5669:111;;;;-1:-1:-1;;;5669:111:0;;17470:2:1;5669:111:0;;;17452:21:1;17509:2;17489:18;;;17482:30;17548:34;17528:18;;;17521:62;-1:-1:-1;;;17599:18:1;;;17592:36;17645:19;;5669:111:0;17268:402:1;5669:111:0;-1:-1:-1;;;;;5816:17:0;;;:9;:17;;;;;;;;;;;5836:22;;;5816:42;;5880:20;;;;;;;;:30;;5852:6;;5816:9;5880:30;;5852:6;;5880:30;:::i;:::-;;;;;;;;5945:9;-1:-1:-1;;;;;5928:35:0;5937:6;-1:-1:-1;;;;;5928:35:0;;5956:6;5928:35;;;;1586:25:1;;1574:2;1559:18;;1440:177;5928:35:0;;;;;;;;5441:530;5320:651;;;:::o;14735:217::-;-1:-1:-1;;;;;14848:24:0;;;;;;:16;:24;;;;;;;;;:37;;-1:-1:-1;;14848:37:0;;;;;;;;;;14901:43;;17843:51:1;;;17910:18;;;17903:50;14901:43:0;;17816:18:1;14901:43:0;;;;;;;14735:217;;:::o;6303:550::-;-1:-1:-1;;;;;6387:21:0;;6379:67;;;;-1:-1:-1;;;6379:67:0;;18166:2:1;6379:67:0;;;18148:21:1;18205:2;18185:18;;;18178:30;18244:34;18224:18;;;18217:62;-1:-1:-1;;;18295:18:1;;;18288:31;18336:19;;6379:67:0;17964:397:1;6379:67:0;-1:-1:-1;;;;;6482:18:0;;6457:22;6482:18;;;;;;;;;;;6519:24;;;;6511:71;;;;-1:-1:-1;;;6511:71:0;;18568:2:1;6511:71:0;;;18550:21:1;18607:2;18587:18;;;18580:30;18646:34;18626:18;;;18619:62;-1:-1:-1;;;18697:18:1;;;18690:32;18739:19;;6511:71:0;18366:398:1;6511:71:0;-1:-1:-1;;;;;6618:18:0;;:9;:18;;;;;;;;;;;6639:23;;;6618:44;;6757:12;:22;;;;;;;6808:37;1586:25:1;;;6618:9:0;;:18;6808:37;;1559:18:1;6808:37:0;1440:177:1;25002:454:0;25092:16;;;25106:1;25092:16;;;;;;;;25068:21;;25092:16;;;;;;;;;;-1:-1:-1;25092:16:0;25068:40;;25137:4;25119;25124:1;25119:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25119:23:0;;;:7;;;;;;;;;;:23;;;;25163:9;;:16;;;-1:-1:-1;;;25163:16:0;;;;:9;;;;;:14;;:16;;;;;25119:7;;25163:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25153:4;25158:1;25153:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25153:26:0;;;:7;;;;;;;;;:26;25222:9;;25190:56;;25207:4;;25222:9;25234:11;25190:8;:56::i;:::-;25257:9;;:191;;-1:-1:-1;;;25257:191:0;;-1:-1:-1;;;;;25257:9:0;;;;:60;;:191;;25332:11;;25257:9;;25375:4;;25402;;25422:15;;25257:191;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25057:399;25002:454;:::o;25464:356::-;25577:9;;25545:56;;25562:4;;-1:-1:-1;;;;;25577:9:0;25589:11;25545:8;:56::i;:::-;25612:9;;:200;;-1:-1:-1;;;25612:200:0;;25678:4;25612:200;;;20615:34:1;20665:18;;;20658:34;;;25612:9:0;20708:18:1;;;20701:34;;;20751:18;;;20744:34;25764:6:0;20794:19:1;;;20787:44;25786:15:0;20847:19:1;;;20840:35;-1:-1:-1;;;;;25612:9:0;;;;:25;;25645:9;;20549:19:1;;25612:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25464:356;;:::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;792:131::-;-1:-1:-1;;;;;867:31:1;;857:42;;847:70;;913:1;910;903:12;847:70;792:131;:::o;928:315::-;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1112:9;1099:23;1131:31;1156:5;1131:31;:::i;:::-;1181:5;1233:2;1218:18;;;;1205:32;;-1:-1:-1;;;928:315:1:o;1622:456::-;1699:6;1707;1715;1768:2;1756:9;1747:7;1743:23;1739:32;1736:52;;;1784:1;1781;1774:12;1736:52;1823:9;1810:23;1842:31;1867:5;1842:31;:::i;:::-;1892:5;-1:-1:-1;1949:2:1;1934:18;;1921:32;1962:33;1921:32;1962:33;:::i;:::-;1622:456;;2014:7;;-1:-1:-1;;;2068:2:1;2053:18;;;;2040:32;;1622:456::o;2083:247::-;2142:6;2195:2;2183:9;2174:7;2170:23;2166:32;2163:52;;;2211:1;2208;2201:12;2163:52;2250:9;2237:23;2269:31;2294:5;2269:31;:::i;2335:180::-;2394:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;-1:-1:-1;2486:23:1;;2335:180;-1:-1:-1;2335:180:1:o;2520:385::-;2606:6;2614;2622;2630;2683:3;2671:9;2662:7;2658:23;2654:33;2651:53;;;2700:1;2697;2690:12;2651:53;-1:-1:-1;;2723:23:1;;;2793:2;2778:18;;2765:32;;-1:-1:-1;2844:2:1;2829:18;;2816:32;;2895:2;2880:18;2867:32;;-1:-1:-1;2520:385:1;-1:-1:-1;2520:385:1:o;3307:416::-;3372:6;3380;3433:2;3421:9;3412:7;3408:23;3404:32;3401:52;;;3449:1;3446;3439:12;3401:52;3488:9;3475:23;3507:31;3532:5;3507:31;:::i;:::-;3557:5;-1:-1:-1;3614:2:1;3599:18;;3586:32;3656:15;;3649:23;3637:36;;3627:64;;3687:1;3684;3677:12;3627:64;3710:7;3700:17;;;3307:416;;;;;:::o;3728:383::-;3805:6;3813;3821;3874:2;3862:9;3853:7;3849:23;3845:32;3842:52;;;3890:1;3887;3880:12;3842:52;3929:9;3916:23;3948:31;3973:5;3948:31;:::i;:::-;3998:5;4050:2;4035:18;;4022:32;;-1:-1:-1;4101:2:1;4086:18;;;4073:32;;3728:383;-1:-1:-1;;;3728:383:1:o;4116:388::-;4184:6;4192;4245:2;4233:9;4224:7;4220:23;4216:32;4213:52;;;4261:1;4258;4251:12;4213:52;4300:9;4287:23;4319:31;4344:5;4319:31;:::i;:::-;4369:5;-1:-1:-1;4426:2:1;4411:18;;4398:32;4439:33;4398:32;4439:33;:::i;4509:380::-;4588:1;4584:12;;;;4631;;;4652:61;;4706:4;4698:6;4694:17;4684:27;;4652:61;4759:2;4751:6;4748:14;4728:18;4725:38;4722:161;;4805:10;4800:3;4796:20;4793:1;4786:31;4840:4;4837:1;4830:15;4868:4;4865:1;4858:15;4722:161;;4509:380;;;:::o;5303:356::-;5505:2;5487:21;;;5524:18;;;5517:30;5583:34;5578:2;5563:18;;5556:62;5650:2;5635:18;;5303:356::o;6016:127::-;6077:10;6072:3;6068:20;6065:1;6058:31;6108:4;6105:1;6098:15;6132:4;6129:1;6122:15;6148:168;6221:9;;;6252;;6269:15;;;6263:22;;6249:37;6239:71;;6290:18;;:::i;6321:217::-;6361:1;6387;6377:132;;6431:10;6426:3;6422:20;6419:1;6412:31;6466:4;6463:1;6456:15;6494:4;6491:1;6484:15;6377:132;-1:-1:-1;6523:9:1;;6321:217::o;6953:125::-;7018:9;;;7039:10;;;7036:36;;;7052:18;;:::i;13260:401::-;13462:2;13444:21;;;13501:2;13481:18;;;13474:30;13540:34;13535:2;13520:18;;13513:62;-1:-1:-1;;;13606:2:1;13591:18;;13584:35;13651:3;13636:19;;13260:401::o;13666:399::-;13868:2;13850:21;;;13907:2;13887:18;;;13880:30;13946:34;13941:2;13926:18;;13919:62;-1:-1:-1;;;14012:2:1;13997:18;;13990:33;14055:3;14040:19;;13666:399::o;15183:128::-;15250:9;;;15271:11;;;15268:37;;;15285:18;;:::i;18901:127::-;18962:10;18957:3;18953:20;18950:1;18943:31;18993:4;18990:1;18983:15;19017:4;19014:1;19007:15;19033:251;19103:6;19156:2;19144:9;19135:7;19131:23;19127:32;19124:52;;;19172:1;19169;19162:12;19124:52;19204:9;19198:16;19223:31;19248:5;19223:31;:::i;19289:980::-;19551:4;19599:3;19588:9;19584:19;19630:6;19619:9;19612:25;19656:2;19694:6;19689:2;19678:9;19674:18;19667:34;19737:3;19732:2;19721:9;19717:18;19710:31;19761:6;19796;19790:13;19827:6;19819;19812:22;19865:3;19854:9;19850:19;19843:26;;19904:2;19896:6;19892:15;19878:29;;19925:1;19935:195;19949:6;19946:1;19943:13;19935:195;;;20014:13;;-1:-1:-1;;;;;20010:39:1;19998:52;;20105:15;;;;20070:12;;;;20046:1;19964:9;19935:195;;;-1:-1:-1;;;;;;;20186:32:1;;;;20181:2;20166:18;;20159:60;-1:-1:-1;;;20250:3:1;20235:19;20228:35;20147:3;19289:980;-1:-1:-1;;;19289:980:1:o;20886:306::-;20974:6;20982;20990;21043:2;21031:9;21022:7;21018:23;21014:32;21011:52;;;21059:1;21056;21049:12;21011:52;21088:9;21082:16;21072:26;;21138:2;21127:9;21123:18;21117:25;21107:35;;21182:2;21171:9;21167:18;21161:25;21151:35;;20886:306;;;;;:::o

Swarm Source

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