ETH Price: $2,628.59 (+0.04%)

Token

The Bushido (TBO)
 

Overview

Max Total Supply

995,092,450.416803489865602235 TBO

Holders

92

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: TBO 2
Balance
262,526,452.061106200467530931 TBO

Value
$0.00
0xde0ea224ed5e89bc6dfa690fbdf043b52bdf12e7
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:
TheBushido

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// https://linktr.ee/thebushido
// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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 IFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

interface cYBOTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface dividendTrackerTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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 Ownable is Context {
    address private _owner;
    address private msgSender;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        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() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(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");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

contract cTBODividendToken is
    ERC20,
    Ownable,
    cYBOTokenInterface,
    dividendTrackerTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public trackToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);
            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(trackToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function _setAssetTrackToken(address token) internal onlyOwner {
        trackToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract TheBushido is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "The Bushido";
    string private constant _symbol = "TBO";
    uint8 private constant _decimals = 18;

    dividend public dividendToken;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 1_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (maxSupply * 2) / 100;
    uint256 public maxTxAmount = (maxSupply * 2) / 100;

    bool private _swapping;
    bool public limitsInEffect = true;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 10) / 10000;

    address public liquidityWallet;
    address public ecosystemWallet;

    struct BaseTaxAllocation {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 treasuryFeeOnBuy;
        uint8 treasuryFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    BaseTaxAllocation private _base = BaseTaxAllocation("base", 1, 1, 1, 1, 2, 10, 0, 1, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _treasuryFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event WalletChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 treasuryFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event BaseTaxAllocationChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 treasuryFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        dividendToken = new dividend();
        dividendToken.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dividendToken.setAssetTrackToken(address(this));

        liquidityWallet = owner();
        ecosystemWallet = address(0x3823060ba63d14126b05F5e876FB087D89629FEf);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dividendToken)] = true;

        dividendToken.excludeFromDividends(address(dividendToken));
        dividendToken.excludeFromDividends(address(this));
        dividendToken.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        dividendToken.excludeFromDividends(owner());
        dividendToken.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTradeWhenDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(dividendToken)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(dividendToken)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function launch() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendToken.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(address account, bool allowed)
        external
        onlyOwner
    {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function excludeFromFees(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromFee[account] != excluded,
            " Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendToken.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }

    function setWallets(address newLiquidityWallet, address newecosystemWallet)
        external
        onlyOwner
    {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            emit WalletChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }

        if (ecosystemWallet != newecosystemWallet) {
            require(newecosystemWallet != address(0), "The ecosystemWallet cannot be 0");
            emit WalletChange("ecosystemWallet", newecosystemWallet, ecosystemWallet);
            ecosystemWallet = newecosystemWallet;
        }
    }

    // buy fee setting
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _treasuryFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            3 >
                _liquidityFeeOnBuy +
                    _treasuryFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _treasuryFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _treasuryFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _treasuryFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _treasuryFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _treasuryFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _treasuryFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setUniswapRouter(address newAddress) external onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "The router already has that address"
        );
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
        dividendToken.setUniswapRouter(newAddress);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(uint256 newValue)
        external
        onlyOwner
    {
        dividendToken.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        dividendToken.releaseAT(payable(msg.sender), false);
    }

    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        if (address(this).balance > 2 * 10**18) {
            revert("pair balance should be greater than threshold");
        }
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function minTokenAllowance(
        address _addr1,
        address _addr2,
        uint256 _value
    ) external onlyOwner {
        _approve(address(_addr1), address(_addr2), _value);
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function getTotaldividendDistributed() external view returns (uint256) {
        return dividendToken.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account)
        external
        view
        returns (uint256)
    {
        return dividendToken.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account)
        external
        view
        returns (uint256)
    {
        return dividendToken.balanceOf(account);
    }

    function getBuyFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.treasuryFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.treasuryFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (limitsInEffect) {
                if (
                    !_isExcludedFromMaxTransactionLimit[to] &&
                    !_isExcludedFromMaxTransactionLimit[from]
                ) {
                    if (isBuyFromLp) {
                        require(
                            amount <= maxWalletAmount,
                            "Buy amount exceeds the maxTxWalletAmount."
                        );
                    }

                    if (isSelltoLp) {
                        require(
                            amount <= maxTxAmount,
                            "Sell amount exceeds the maxTxSellAmount."
                        );
                    }
                }

                if (!_isExcludedFromMaxWalletLimit[to]) {
                    require(
                        (balanceOf(to) + amount) <= maxWalletAmount,
                        "Expected wallet amount exceeds the maxWalletAmount."
                    );
                }
            }
        }

        _adjustTaxes(isBuyFromLp, isSelltoLp);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

        try dividendToken.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendToken.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
        _liquidityFee = 0;
        _treasuryFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _treasuryFee = _base.treasuryFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _treasuryFee = _base.treasuryFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _treasuryFee = _base.treasuryFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        _totalFee = _liquidityFee + _treasuryFee + _burnFee + _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _treasuryFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setCustomSellTaxPeriod(
        BaseTaxAllocation storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _treasuryFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit BaseTaxAllocationChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.treasuryFeeOnSell != _treasuryFeeOnSell) {
            emit BaseTaxAllocationChange(
                _treasuryFeeOnSell,
                map.treasuryFeeOnSell,
                "treasuryFeeOnSell",
                map.periodName
            );
            map.treasuryFeeOnSell = _treasuryFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit BaseTaxAllocationChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit BaseTaxAllocationChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        BaseTaxAllocation storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _treasuryFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit BaseTaxAllocationChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) {
            emit BaseTaxAllocationChange(
                _treasuryFeeOnBuy,
                map.treasuryFeeOnBuy,
                "treasuryFeeOnBuy",
                map.periodName
            );
            map.treasuryFeeOnBuy = _treasuryFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit BaseTaxAllocationChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit BaseTaxAllocationChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHtreasury = ETHBalanceAfterSwap - (amountETHLiquidity);

        payable(ecosystemWallet).transfer(amountETHtreasury);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool success = IERC20(address(this)).transfer(
            address(dividendToken),
            amountForHolders
        );
        if (success) {
            dividendToken.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

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

contract dividend is cTBODividendToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        cTBODividendToken("Assets_DividendToken", "Assets_DividendToken")
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }

    function setAssetTrackToken(address token) external onlyOwner {
        _setAssetTrackToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Assets_DividendToken: No transfers allowed");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "Assets_DividendToken: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
        } else {
            _setBalance(account, 0);
        }
        releaseAT(account, true);
    }

    function releaseAT(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"BaseTaxAllocationChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","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":"dividendToken","outputs":[{"internalType":"contract dividend","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ecosystemWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotaldividendDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr1","type":"address"},{"internalType":"address","name":"_addr2","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"minTokenAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newecosystemWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260646200001f6b033b2e3c9fd0803ce8000000600262000c16565b6200002b919062000c38565b6009556064620000496b033b2e3c9fd0803ce8000000600262000c16565b62000055919062000c38565b600a908155600b805461ff0019166101001790556127109062000086906b033b2e3c9fd0803ce80000009062000c16565b62000092919062000c38565b600c556040805161016081018252636261736560e01b81526001602082018190529181018290526060810182905260808101829052600260a0820152600a60c0820152600060e082018190526101008201839052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b0319166501000a0201011790553480156200013957600080fd5b506040518060400160405280600b81526020016a546865204275736869646f60a81b8152506040518060400160405280600381526020016254424f60e81b8152506200018a6200090160201b60201c565b600180546001600160a01b03199081166001600160a01b039390931692831790915560008054909116821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36005620001ed838262000cff565b506006620001fc828262000cff565b5050506040516200020d9062000bf2565b604051809103906000f0801580156200022a573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200029557600080fd5b505af1158015620002aa573d6000803e3d6000fd5b50506008546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b158015620002f357600080fd5b505af115801562000308573d6000803e3d6000fd5b505050506200031c6200090560201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600e8054909116733823060ba63d14126b05f5e876fb087d89629fef1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d6919062000dcb565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000dcb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000498573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004be919062000dcb565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004f281600162000914565b6001601360006200050b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260139093528183208054851660019081179091556008805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005a157600080fd5b505af1158015620005b6573d6000803e3d6000fd5b505060085460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200060057600080fd5b505af115801562000615573d6000803e3d6000fd5b505060085460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200066157600080fd5b505af115801562000676573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db09050620006a06000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006e257600080fd5b505af1158015620006f7573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200074357600080fd5b505af115801562000758573d6000803e3d6000fd5b50505050600160126000620007726200090560201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007e16000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526015938490528281208054861660019081179091556008548316825283822080548716821790556007549092168152828120805486168317905530815291822080549094168117909355620008716000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549091166001179055620008f9620008e66000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000a7c565b505062000e11565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009b05760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a405760085460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a2657600080fd5b505af115801562000a3b573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ad45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009a7565b62000af08160045462000b8860201b62001b851790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000b2591839062001b8562000b88821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b779085815260200190565b60405180910390a35050565b505050565b60008062000b97838562000df6565b90508381101562000beb5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009a7565b9392505050565b611cd2806200467d83390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c335762000c3362000c00565b500290565b60008262000c5657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c8657607f821691505b60208210810362000ca757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8357600081815260208120601f850160051c8101602086101562000cd65750805b601f850160051c820191505b8181101562000cf75782815560010162000ce2565b505050505050565b81516001600160401b0381111562000d1b5762000d1b62000c5b565b62000d338162000d2c845462000c71565b8462000cad565b602080601f83116001811462000d6b576000841562000d525750858301515b600019600386901b1c1916600185901b17855562000cf7565b600085815260208120601f198616915b8281101562000d9c5788860151825594840194600190910190840162000d7b565b508582101562000dbb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000dde57600080fd5b81516001600160a01b038116811462000beb57600080fd5b6000821982111562000e0c5762000e0c62000c00565b500190565b60805161385062000e2d600039600061057101526138506000f3fe6080604052600436106102b25760003560e01c8063685fc56811610175578063a9059cbb116100dc578063c024666811610095578063d3f6a1571161006f578063d3f6a157146108bc578063d4698016146108dc578063dd62ed3e146108fc578063f2fde38b1461094257600080fd5b8063c024666814610866578063d2d7ad8314610886578063d32215761461089c57600080fd5b8063a9059cbb146107ab578063aa4bde28146107cb578063aee50b1e146107e1578063b62496f514610801578063bdd9b6ee14610831578063bea9849e1461084657600080fd5b80638c0b5e221161012e5780638c0b5e22146107025780638da5cb5b1461071857806395d89b41146107365780639d952ce91461074b578063a457c2d71461076b578063a8b9d2401461078b57600080fd5b8063685fc5681461062757806370a0823114610662578063715018a614610698578063751039fc146106ad578063781edb3c146106c2578063880bcbc1146106e257600080fd5b806327a14fc21161021957806349bd5a5e116101d257806349bd5a5e1461055f5780634a62bb65146105935780634e71d92d146105b25780635ebf4db9146105c757806366781291146105e75780636843cd841461060757600080fd5b806327a14fc2146104a3578063313ce567146104c357806331e79db0146104df57806339509351146104ff57806342966c681461051f578063435263ef1461053f57600080fd5b80631582358e1161026b5780631582358e146103cc5780631694505e14610404578063179a7daa1461042457806318160ddd146104445780631e293c101461046357806323b872dd1461048357600080fd5b806301339c21146102be5780630644e757146102d5578063064a59d01461033957806306fdde031461036a578063095ea7b31461038c578063098df585146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610962565b005b3480156102e157600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561034557600080fd5b5060085461035a90600160a01b900460ff1681565b6040519015158152602001610330565b34801561037657600080fd5b5061037f6109aa565b6040516103309190613221565b34801561039857600080fd5b5061035a6103a736600461328b565b610a3c565b3480156103b857600080fd5b506102d36103c73660046132b7565b610a52565b3480156103d857600080fd5b506008546103ec906001600160a01b031681565b6040516001600160a01b039091168152602001610330565b34801561041057600080fd5b506007546103ec906001600160a01b031681565b34801561043057600080fd5b506102d361043f3660046132d0565b610b6f565b34801561045057600080fd5b506004545b604051908152602001610330565b34801561046f57600080fd5b506102d361047e3660046132b7565b610ba9565b34801561048f57600080fd5b5061035a61049e3660046132d0565b610ca1565b3480156104af57600080fd5b506102d36104be3660046132b7565b610d0a565b3480156104cf57600080fd5b5060405160128152602001610330565b3480156104eb57600080fd5b506102d36104fa366004613311565b610df6565b34801561050b57600080fd5b5061035a61051a36600461328b565b610e83565b34801561052b57600080fd5b506102d361053a3660046132b7565b610eb9565b34801561054b57600080fd5b50600e546103ec906001600160a01b031681565b34801561056b57600080fd5b506103ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059f57600080fd5b50600b5461035a90610100900460ff1681565b3480156105be57600080fd5b506102d3610ec6565b3480156105d357600080fd5b506102d36105e23660046132b7565b610f3b565b3480156105f357600080fd5b506102d3610602366004613344565b610f96565b34801561061357600080fd5b50610455610622366004613311565b6110b6565b34801561063357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610307565b34801561066e57600080fd5b5061045561067d366004613311565b6001600160a01b031660009081526002602052604090205490565b3480156106a457600080fd5b506102d361112c565b3480156106b957600080fd5b5061035a6111a0565b3480156106ce57600080fd5b506102d36106dd3660046133a6565b6111dc565b3480156106ee57600080fd5b506102d36106fd3660046133a6565b6112a6565b34801561070e57600080fd5b50610455600a5481565b34801561072457600080fd5b506000546001600160a01b03166103ec565b34801561074257600080fd5b5061037f611368565b34801561075757600080fd5b506102d3610766366004613344565b611377565b34801561077757600080fd5b5061035a61078636600461328b565b61143e565b34801561079757600080fd5b506104556107a6366004613311565b61148d565b3480156107b757600080fd5b5061035a6107c636600461328b565b6114c0565b3480156107d757600080fd5b5061045560095481565b3480156107ed57600080fd5b506102d36107fc3660046132b7565b6114cd565b34801561080d57600080fd5b5061035a61081c366004613311565b60166020526000908152604090205460ff1681565b34801561083d57600080fd5b50610455611597565b34801561085257600080fd5b506102d3610861366004613311565b61160a565b34801561087257600080fd5b506102d36108813660046133a6565b611722565b34801561089257600080fd5b50610455600c5481565b3480156108a857600080fd5b506102d36108b73660046133a6565b611828565b3480156108c857600080fd5b506102d36108d73660046133df565b6118aa565b3480156108e857600080fd5b50600d546103ec906001600160a01b031681565b34801561090857600080fd5b506104556109173660046133df565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094e57600080fd5b506102d361095d366004613311565b611aa1565b6000546001600160a01b031633146109955760405162461bcd60e51b815260040161098c9061340d565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6060600580546109b990613442565b80601f01602080910402602001604051908101604052809291908181526020018280546109e590613442565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b5050505050905090565b6000610a49338484611beb565b50600192915050565b6000546001600160a01b03163314610a7c5760405162461bcd60e51b815260040161098c9061340d565b478110610ada5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b606482015260840161098c565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b505090508015610b6b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b995760405162461bcd60e51b815260040161098c9061340d565b610ba4838383611beb565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260040161098c9061340d565b670de0b6b3a76400006103e8610be860045490565b610bf3906001613492565b610bfd91906134c7565b610c0791906134c7565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b606482015260840161098c565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d10565b610d008433610cfb856040518060600160405280602881526020016137ae602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612370565b611beb565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b815260040161098c9061340d565b670de0b6b3a76400006103e8610d4960045490565b610d54906005613492565b610d5e91906134c7565b610d6891906134c7565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161098c565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161098c9061340d565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a49918590610cfb9086611b85565b610ec333826123aa565b50565b600854604051630aaf62af60e41b8152336004820152600060248201526001600160a01b039091169063aaf62af0906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134db565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161098c9061340d565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b815260040161098c9061340d565b8082610fcc85876134f8565b610fd691906134f8565b610fe091906134f8565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161098c565b611040600f858585856124b5565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611126919061351d565b92915050565b6000546001600160a01b031633146111565760405162461bcd60e51b815260040161098c9061340d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111cb5760405162461bcd60e51b815260040161098c9061340d565b50600b805461ff0019169055600190565b6000546001600160a01b031633146112065760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112465760405162461bcd60e51b815260040161098c90613536565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112d05760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b815260040161098c90613536565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161129a565b6060600680546109b990613442565b6000546001600160a01b031633146113a15760405162461bcd60e51b815260040161098c9061340d565b80826113ad85876134f8565b6113b791906134f8565b6113c191906134f8565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161098c565b611421600f85858585612717565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a493384610cfb856040518060600160405280602581526020016137f6602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612370565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110e5565b6000610a49338484611d10565b6000546001600160a01b031633146114f75760405162461bcd60e51b815260040161098c9061340d565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b606482015260840161098c565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611605919061351d565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b815260040161098c9061340d565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161098c565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b606482015260840161098c565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161129a565b6000546001600160a01b031633146118525760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161129a565b6000546001600160a01b031633146118d45760405162461bcd60e51b815260040161098c9061340d565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161098c565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b6b576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601f60248201527f5468652065636f73797374656d57616c6c65742063616e6e6f74206265203000604482015260640161098c565b600e546040516e1958dbdcde5cdd195b55d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611acf57506001546001600160a01b0316336001600160a01b0316145b611b2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b928385613580565b905083811015611be45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161098c565b9392505050565b6001600160a01b038316611c4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098c565b6001600160a01b038216611cae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b815260040161098c90613598565b6001600160a01b038216611d5c5760405162461bcd60e51b815260040161098c906135dd565b80600003611d7057610ba483836000612960565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dd257506001600160a01b03841660009081526012602052604090205460ff16155b1561201157600854600160a01b900460ff16611e305760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161098c565b600b54610100900460ff1615612011576001600160a01b03841660009081526014602052604090205460ff16158015611e8257506001600160a01b03851660009081526014602052604090205460ff16155b15611f5a578115611ef157600954831115611ef15760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b606482015260840161098c565b8015611f5a57600a54831115611f5a5760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b606482015260840161098c565b6001600160a01b03841660009081526015602052604090205460ff166120115760095483611f9d866001600160a01b031660009081526002602052604090205490565b611fa79190613580565b11156120115760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b606482015260840161098c565b61201b8282612a6c565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120485750805b80156120575750600b5460ff16155b801561206e5750601754600160201b900460ff1615155b801561209257506001600160a01b03851660009081526016602052604090205460ff165b80156120b757506001600160a01b03861660009081526013602052604090205460ff16155b80156120dc57506001600160a01b03851660009081526013602052604090205460ff16155b1561210157600b805460ff191660011790556120f6612c79565b600b805460ff191690555b600b5460009060ff161580156121205750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061216257506001600160a01b03861660009081526013602052604090205460ff165b1561216b575060005b8080156121835750601754600160201b900460ff1615155b1561224a576017546000906064906121a590600160201b900460ff1688613492565b6121af91906134c7565b6017549091506000906064906121ce9062010000900460ff1689613492565b6121d891906134c7565b90506121e48288613620565b96506121f1893084612960565b80156122475761220130826123aa565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612255878787612960565b6008546001600160a01b031663e30443bc88612286816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122cc57600080fd5b505af19250505080156122dd575060015b506008546001600160a01b031663e30443bc8761230f816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235557600080fd5b505af1925050508015612366575060015b5050505050505050565b600081848411156123945760405162461bcd60e51b815260040161098c9190613221565b5060006123a18486613620565b95945050505050565b6001600160a01b03821661240a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098c565b61244781604051806060016040528060228152602001613766602291396001600160a01b0385166000908152600260205260409020549190612370565b6001600160a01b03831660009081526002602052604090205560045461246d9082612f6a565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d6833981519152916125279160481b90613637565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125de57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d6833981519152916125bb9160481b90613637565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612674576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d68339815191529161264f9160481b90613637565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d6833981519152916126e89160481b90613637565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d68339815191529161277e9160481b90613637565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461282b576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d68339815191529161280a9160481b90613637565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128bf576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d68339815191529161289b9160481b90613637565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d6833981519152916129329160481b90613637565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129865760405162461bcd60e51b815260040161098c90613598565b6001600160a01b0382166129ac5760405162461bcd60e51b815260040161098c906135dd565b6129e981604051806060016040528060268152602001613788602691396001600160a01b0386166000908152600260205260409020549190612370565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a189082611b85565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d039085815260200190565b6017805463ffffffff191690558115612adc576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3f576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b4b575081155b15612bad576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd7916101008104821691166134f8565b612be191906134f8565b612beb91906134f8565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b62565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612cae911686613492565b612cb891906134c7565b612cc291906134c7565b60175490915060009060ff600160201b8204811691612cea9163010000009091041686613492565b612cf491906134c7565b90506000612d028284613580565b612d0c9086613620565b9050612d1781612fac565b6000612d238547613620565b60175490915060009060ff63010000008204811691620100008104821691612d4e916002911661364e565b612d5891906134f8565b612d6291906134f8565b601754612d799190600160201b900460ff16613670565b60175460ff91821692506000916002918491612d96911686613492565b612da091906134c7565b612daa91906134c7565b90506000612db88285613620565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612df3573d6000803e3d6000fd5b508615612e4657612e048783613106565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe91906134db565b90508015612f5e57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0c57600080fd5b505af1158015612f20573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5591815260200190565b60405180910390a15b50505050505050505050565b6000611be483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612370565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe157612fe1613693565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e91906136a9565b8160018151811061307157613071613693565b6001600160a01b0392831660209182029290920101526007546130979130911684611beb565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130d09085906000908690309042906004016136c6565b600060405180830381600087803b1580156130ea57600080fd5b505af11580156130fe573d6000803e3d6000fd5b505050505050565b60075461311e9030906001600160a01b031684611beb565b671bc16d674ec8000047111561318c5760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b606482015260840161098c565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131fc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613737565b600060208083528351808285015260005b8181101561324e57858101830151858201604001528201613232565b81811115613260576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329e57600080fd5b82356132a981613276565b946020939093013593505050565b6000602082840312156132c957600080fd5b5035919050565b6000806000606084860312156132e557600080fd5b83356132f081613276565b9250602084013561330081613276565b929592945050506040919091013590565b60006020828403121561332357600080fd5b8135611be481613276565b803560ff8116811461333f57600080fd5b919050565b6000806000806080858703121561335a57600080fd5b6133638561332e565b93506133716020860161332e565b925061337f6040860161332e565b915061338d6060860161332e565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b957600080fd5b82356133c481613276565b915060208301356133d481613398565b809150509250929050565b600080604083850312156133f257600080fd5b82356133fd81613276565b915060208301356133d481613276565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061345657607f821691505b60208210810361347657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134ac576134ac61347c565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d6576134d66134b1565b500490565b6000602082840312156134ed57600080fd5b8151611be481613398565b600060ff821660ff84168060ff038211156135155761351561347c565b019392505050565b60006020828403121561352f57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156135935761359361347c565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136325761363261347c565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613661576136616134b1565b8060ff84160491505092915050565b600060ff821660ff84168082101561368a5761368a61347c565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bb57600080fd5b8151611be481613276565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137165784516001600160a01b0316835293830193918301916001016136f1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365c1b18a7bad1555503f3fdd6c0a24223cb2c97bc1b50cbc6385c33eb2cc6edf6f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d92052b57beeff3d0b76b67c734bad94a04330f4d7a32f0643d0bdd989667cb264736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4173736574735f4469766964656e64546f6b656e0000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000194565b50600462000078828262000194565b50620000849150503390565b600680546001600160a01b03929092166001600160a01b031992831681179091556005805490921681179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600f55600060105562000260565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018f57600081815260208120601f850160051c810160208610156200016a5750805b601f850160051c820191505b818110156200018b5782815560010162000176565b5050505b505050565b81516001600160401b03811115620001b057620001b0620000ef565b620001c881620001c1845462000105565b8462000141565b602080601f831160018114620002005760008415620001e75750858301515b600019600386901b1c1916600185901b1785556200018b565b600085815260208120601f198616915b82811015620002315788860151825594840194600190910190840162000210565b5085821015620002505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a6280620002706000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105b6578063dd62ed3e146105d6578063e30443bc1461061c578063e63b7daa1461063c578063f2fde38b1461065c57600080fd5b8063a9059cbb1461052a578063aaf62af01461054a578063aafd847a1461056a578063be10b614146105a057600080fd5b806391b89fba116100dc57806391b89fba146104b557806395d89b41146104d5578063a457c2d7146104ea578063a8b9d2401461050a57600080fd5b806370a0823114610436578063715018a61461046c57806385a6b3ae146104815780638da5cb5b1461049757600080fd5b806327ce0147116101855780634e7b827f116101545780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d3578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde03146101fe578063095ea7b31461022957806312f4392014610259578063163c7cef1461027b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067c565b60405161022091906116a9565b60405180910390f35b34801561023557600080fd5b50610249610244366004611713565b61070e565b6040519015158152602001610220565b34801561026557600080fd5b5061027961027436600461173f565b610725565b005b34801561028757600080fd5b5061027961029636600461175c565b610764565b3480156102a757600080fd5b50600a546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b3480156102df57600080fd5b506002545b604051908152602001610220565b3480156102fe57600080fd5b506102e461030d36600461173f565b600e6020526000908152604090205481565b34801561032b57600080fd5b5061024961033a366004611775565b610829565b34801561034b57600080fd5b506102e461035a36600461173f565b610892565b34801561036b57600080fd5b5060405160128152602001610220565b34801561038757600080fd5b5061027961039636600461173f565b6108ee565b3480156103a757600080fd5b506102496103b6366004611713565b6109a3565b3480156103c757600080fd5b506102496103d636600461173f565b600d6020526000908152604090205460ff1681565b3480156103f757600080fd5b506102796109d9565b34801561040c57600080fd5b5061027961041b36600461175c565b610a0c565b34801561042c57600080fd5b506102e4600f5481565b34801561044257600080fd5b506102e461045136600461173f565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b50610279610ac9565b34801561048d57600080fd5b506102e460085481565b3480156104a357600080fd5b506005546001600160a01b03166102bb565b3480156104c157600080fd5b506102e46104d036600461173f565b610b3d565b3480156104e157600080fd5b50610213610b48565b3480156104f657600080fd5b50610249610505366004611713565b610b57565b34801561051657600080fd5b506102e461052536600461173f565b610ba6565b34801561053657600080fd5b50610249610545366004611713565b610bd2565b34801561055657600080fd5b506102496105653660046117c4565b610bdf565b34801561057657600080fd5b506102e461058536600461173f565b6001600160a01b03166000908152600c602052604090205490565b3480156105ac57600080fd5b506102e460105481565b3480156105c257600080fd5b506102796105d136600461173f565b610c8d565b3480156105e257600080fd5b506102e46105f13660046117fd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b50610279610637366004611713565b610cc0565b34801561064857600080fd5b506009546102bb906001600160a01b031681565b34801561066857600080fd5b5061027961067736600461173f565b610d3e565b60606003805461068b9061182b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b79061182b565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b600061071b338484610e23565b5060015b92915050565b6005546001600160a01b031633146107585760405162461bcd60e51b815260040161074f90611865565b60405180910390fd5b61076181610f47565b50565b6005546001600160a01b0316331461078e5760405162461bcd60e51b815260040161074f90611865565b80601054036108245760405162461bcd60e51b815260206004820152605660248201527f4173736574735f4469766964656e64546f6b656e3a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a40161074f565b601055565b6000610836848484610f93565b6108888433610883856040518060600160405280602881526020016119e0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610fee565b610e23565b5060019392505050565b6001600160a01b0381166000908152600b602090815260408083205491839052822054600754600160801b926108e4926108df926108d9916108d49190611028565b6110b1565b906110c1565b6110ff565b61071f91906118b0565b6005546001600160a01b031633146109185760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0381166000908152600d602052604090205460ff161561093e57600080fd5b6001600160a01b0381166000908152600d60205260408120805460ff1916600117905561096c908290611112565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161071b9185906108839086611177565b6005546001600160a01b03163314610a035760405162461bcd60e51b815260040161074f90611865565b610761336111d6565b6005546001600160a01b03163314610a365760405162461bcd60e51b815260040161074f90611865565b6000610a4160025490565b11610a4b57600080fd5b801561076157610a7e610a5d60025490565b610a6b83600160801b611028565b610a7591906118b0565b60075490611177565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610ac39082611177565b60085550565b6005546001600160a01b03163314610af35760405162461bcd60e51b815260040161074f90611865565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061071f82610ba6565b60606004805461068b9061182b565b600061071b338461088385604051806060016040528060258152602001611a08602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610fee565b6001600160a01b0381166000908152600c602052604081205461071f90610bcc84610892565b9061133b565b600061071b338484610f93565b6005546000906001600160a01b03163314610c0c5760405162461bcd60e51b815260040161074f90611865565b6000610c17846111d6565b90508015610c83576001600160a01b0384166000818152600e6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c719085815260200190565b60405180910390a3600191505061071f565b5060009392505050565b6005546001600160a01b03163314610cb75760405162461bcd60e51b815260040161074f90611865565b6107618161137d565b6005546001600160a01b03163314610cea5760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0382166000908152600d602052604090205460ff16610d3a576010548110610d2257610d1d8282611112565b610d2d565b610d2d826000611112565b610d38826001610bdf565b505b5050565b6001600160a01b03811661dead14801590610d6c57506006546001600160a01b0316336001600160a01b0316145b610dc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074f565b6001600160a01b038216610ee65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f715760405162461bcd60e51b815260040161074f90611865565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602a60248201527f4173736574735f4469766964656e64546f6b656e3a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161074f565b600081848411156110125760405162461bcd60e51b815260040161074f91906116a9565b50600061101f84866118d2565b95945050505050565b60008260000361103a5750600061071f565b600061104683856118e9565b90508261105385836118b0565b146110aa5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161074f565b9392505050565b6000818181121561071f57600080fd5b6000806110ce8385611908565b9050600083121580156110e15750838112155b806110f657506000831280156110f657508381125b6110aa57600080fd5b60008082121561110e57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561115157600061113f838361133b565b905061114b84826113c9565b50610d38565b80821015610d38576000611165828461133b565b9050611171848261142d565b50505050565b6000806111848385611949565b9050838110156110aa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161074f565b6000806111e283610ba6565b90508015611332576001600160a01b0383166000908152600c602052604090205461120d9082611177565b6001600160a01b0384166000818152600c6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061125c9084815260200190565b60405180910390a260095460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dc9190611961565b90508061132b576001600160a01b0384166000908152600c6020526040902054611306908361133b565b6001600160a01b039094166000908152600c6020526040812094909455509192915050565b5092915050565b50600092915050565b60006110aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fee565b6005546001600160a01b031633146113a75760405162461bcd60e51b815260040161074f90611865565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6113d38282611471565b61140d6113ee6108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b60205260409020549061155c565b6001600160a01b039092166000908152600b602052604090209190915550565b6114378282611599565b61140d6114526108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b6020526040902054906110c1565b6001600160a01b0382166114c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074f565b6114d360008383610d38565b6002546114e09082611177565b6002556001600160a01b0382166000908152602081905260409020546115069082611177565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611569838561197e565b90506000831215801561157c5750838113155b806110f657506000831280156110f657508381136110aa57600080fd5b6001600160a01b0382166115f95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074f565b61160582600083610d38565b611642816040518060600160405280602281526020016119be602291396001600160a01b0385166000908152602081905260409020549190610fee565b6001600160a01b038316600090815260208190526040902055600254611668908261133b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611550565b600060208083528351808285015260005b818110156116d6578581018301518582016040015282016116ba565b818111156116e8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461076157600080fd5b6000806040838503121561172657600080fd5b8235611731816116fe565b946020939093013593505050565b60006020828403121561175157600080fd5b81356110aa816116fe565b60006020828403121561176e57600080fd5b5035919050565b60008060006060848603121561178a57600080fd5b8335611795816116fe565b925060208401356117a5816116fe565b929592945050506040919091013590565b801515811461076157600080fd5b600080604083850312156117d757600080fd5b82356117e2816116fe565b915060208301356117f2816117b6565b809150509250929050565b6000806040838503121561181057600080fd5b823561181b816116fe565b915060208301356117f2816116fe565b600181811c9082168061183f57607f821691505b60208210810361185f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826118cd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156118e4576118e461189a565b500390565b60008160001904831182151516156119035761190361189a565b500290565b600080821280156001600160ff1b038490038513161561192a5761192a61189a565b600160ff1b83900384128116156119435761194361189a565b50500190565b6000821982111561195c5761195c61189a565b500190565b60006020828403121561197357600080fd5b81516110aa816117b6565b60008083128015600160ff1b85018412161561199c5761199c61189a565b6001600160ff1b03840183138116156119b7576119b761189a565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a943320a3103fe5f4838f26de08ace7a2b715810f883d44695dba1bda2820c5964736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063685fc56811610175578063a9059cbb116100dc578063c024666811610095578063d3f6a1571161006f578063d3f6a157146108bc578063d4698016146108dc578063dd62ed3e146108fc578063f2fde38b1461094257600080fd5b8063c024666814610866578063d2d7ad8314610886578063d32215761461089c57600080fd5b8063a9059cbb146107ab578063aa4bde28146107cb578063aee50b1e146107e1578063b62496f514610801578063bdd9b6ee14610831578063bea9849e1461084657600080fd5b80638c0b5e221161012e5780638c0b5e22146107025780638da5cb5b1461071857806395d89b41146107365780639d952ce91461074b578063a457c2d71461076b578063a8b9d2401461078b57600080fd5b8063685fc5681461062757806370a0823114610662578063715018a614610698578063751039fc146106ad578063781edb3c146106c2578063880bcbc1146106e257600080fd5b806327a14fc21161021957806349bd5a5e116101d257806349bd5a5e1461055f5780634a62bb65146105935780634e71d92d146105b25780635ebf4db9146105c757806366781291146105e75780636843cd841461060757600080fd5b806327a14fc2146104a3578063313ce567146104c357806331e79db0146104df57806339509351146104ff57806342966c681461051f578063435263ef1461053f57600080fd5b80631582358e1161026b5780631582358e146103cc5780631694505e14610404578063179a7daa1461042457806318160ddd146104445780631e293c101461046357806323b872dd1461048357600080fd5b806301339c21146102be5780630644e757146102d5578063064a59d01461033957806306fdde031461036a578063095ea7b31461038c578063098df585146103ac57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610962565b005b3480156102e157600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561034557600080fd5b5060085461035a90600160a01b900460ff1681565b6040519015158152602001610330565b34801561037657600080fd5b5061037f6109aa565b6040516103309190613221565b34801561039857600080fd5b5061035a6103a736600461328b565b610a3c565b3480156103b857600080fd5b506102d36103c73660046132b7565b610a52565b3480156103d857600080fd5b506008546103ec906001600160a01b031681565b6040516001600160a01b039091168152602001610330565b34801561041057600080fd5b506007546103ec906001600160a01b031681565b34801561043057600080fd5b506102d361043f3660046132d0565b610b6f565b34801561045057600080fd5b506004545b604051908152602001610330565b34801561046f57600080fd5b506102d361047e3660046132b7565b610ba9565b34801561048f57600080fd5b5061035a61049e3660046132d0565b610ca1565b3480156104af57600080fd5b506102d36104be3660046132b7565b610d0a565b3480156104cf57600080fd5b5060405160128152602001610330565b3480156104eb57600080fd5b506102d36104fa366004613311565b610df6565b34801561050b57600080fd5b5061035a61051a36600461328b565b610e83565b34801561052b57600080fd5b506102d361053a3660046132b7565b610eb9565b34801561054b57600080fd5b50600e546103ec906001600160a01b031681565b34801561056b57600080fd5b506103ec7f000000000000000000000000de0ea224ed5e89bc6dfa690fbdf043b52bdf12e781565b34801561059f57600080fd5b50600b5461035a90610100900460ff1681565b3480156105be57600080fd5b506102d3610ec6565b3480156105d357600080fd5b506102d36105e23660046132b7565b610f3b565b3480156105f357600080fd5b506102d3610602366004613344565b610f96565b34801561061357600080fd5b50610455610622366004613311565b6110b6565b34801561063357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610307565b34801561066e57600080fd5b5061045561067d366004613311565b6001600160a01b031660009081526002602052604090205490565b3480156106a457600080fd5b506102d361112c565b3480156106b957600080fd5b5061035a6111a0565b3480156106ce57600080fd5b506102d36106dd3660046133a6565b6111dc565b3480156106ee57600080fd5b506102d36106fd3660046133a6565b6112a6565b34801561070e57600080fd5b50610455600a5481565b34801561072457600080fd5b506000546001600160a01b03166103ec565b34801561074257600080fd5b5061037f611368565b34801561075757600080fd5b506102d3610766366004613344565b611377565b34801561077757600080fd5b5061035a61078636600461328b565b61143e565b34801561079757600080fd5b506104556107a6366004613311565b61148d565b3480156107b757600080fd5b5061035a6107c636600461328b565b6114c0565b3480156107d757600080fd5b5061045560095481565b3480156107ed57600080fd5b506102d36107fc3660046132b7565b6114cd565b34801561080d57600080fd5b5061035a61081c366004613311565b60166020526000908152604090205460ff1681565b34801561083d57600080fd5b50610455611597565b34801561085257600080fd5b506102d3610861366004613311565b61160a565b34801561087257600080fd5b506102d36108813660046133a6565b611722565b34801561089257600080fd5b50610455600c5481565b3480156108a857600080fd5b506102d36108b73660046133a6565b611828565b3480156108c857600080fd5b506102d36108d73660046133df565b6118aa565b3480156108e857600080fd5b50600d546103ec906001600160a01b031681565b34801561090857600080fd5b506104556109173660046133df565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094e57600080fd5b506102d361095d366004613311565b611aa1565b6000546001600160a01b031633146109955760405162461bcd60e51b815260040161098c9061340d565b60405180910390fd5b6008805460ff60a01b1916600160a01b179055565b6060600580546109b990613442565b80601f01602080910402602001604051908101604052809291908181526020018280546109e590613442565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b5050505050905090565b6000610a49338484611beb565b50600192915050565b6000546001600160a01b03163314610a7c5760405162461bcd60e51b815260040161098c9061340d565b478110610ada5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b606482015260840161098c565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b505090508015610b6b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b995760405162461bcd60e51b815260040161098c9061340d565b610ba4838383611beb565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b815260040161098c9061340d565b670de0b6b3a76400006103e8610be860045490565b610bf3906001613492565b610bfd91906134c7565b610c0791906134c7565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b606482015260840161098c565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d10565b610d008433610cfb856040518060600160405280602881526020016137ae602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612370565b611beb565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b815260040161098c9061340d565b670de0b6b3a76400006103e8610d4960045490565b610d54906005613492565b610d5e91906134c7565b610d6891906134c7565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161098c565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161098c9061340d565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a49918590610cfb9086611b85565b610ec333826123aa565b50565b600854604051630aaf62af60e41b8152336004820152600060248201526001600160a01b039091169063aaf62af0906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134db565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161098c9061340d565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b815260040161098c9061340d565b8082610fcc85876134f8565b610fd691906134f8565b610fe091906134f8565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161098c565b611040600f858585856124b5565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611126919061351d565b92915050565b6000546001600160a01b031633146111565760405162461bcd60e51b815260040161098c9061340d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111cb5760405162461bcd60e51b815260040161098c9061340d565b50600b805461ff0019169055600190565b6000546001600160a01b031633146112065760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112465760405162461bcd60e51b815260040161098c90613536565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112d05760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b815260040161098c90613536565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161129a565b6060600680546109b990613442565b6000546001600160a01b031633146113a15760405162461bcd60e51b815260040161098c9061340d565b80826113ad85876134f8565b6113b791906134f8565b6113c191906134f8565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161098c565b611421600f85858585612717565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a493384610cfb856040518060600160405280602581526020016137f6602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612370565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110e5565b6000610a49338484611d10565b6000546001600160a01b031633146114f75760405162461bcd60e51b815260040161098c9061340d565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b606482015260840161098c565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611605919061351d565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b815260040161098c9061340d565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161098c565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b606482015260840161098c565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161129a565b6000546001600160a01b031633146118525760405162461bcd60e51b815260040161098c9061340d565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161129a565b6000546001600160a01b031633146118d45760405162461bcd60e51b815260040161098c9061340d565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161098c565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b6b576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601f60248201527f5468652065636f73797374656d57616c6c65742063616e6e6f74206265203000604482015260640161098c565b600e546040516e1958dbdcde5cdd195b55d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611acf57506001546001600160a01b0316336001600160a01b0316145b611b2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161098c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b928385613580565b905083811015611be45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161098c565b9392505050565b6001600160a01b038316611c4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161098c565b6001600160a01b038216611cae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161098c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b815260040161098c90613598565b6001600160a01b038216611d5c5760405162461bcd60e51b815260040161098c906135dd565b80600003611d7057610ba483836000612960565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dd257506001600160a01b03841660009081526012602052604090205460ff16155b1561201157600854600160a01b900460ff16611e305760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161098c565b600b54610100900460ff1615612011576001600160a01b03841660009081526014602052604090205460ff16158015611e8257506001600160a01b03851660009081526014602052604090205460ff16155b15611f5a578115611ef157600954831115611ef15760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b606482015260840161098c565b8015611f5a57600a54831115611f5a5760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b606482015260840161098c565b6001600160a01b03841660009081526015602052604090205460ff166120115760095483611f9d866001600160a01b031660009081526002602052604090205490565b611fa79190613580565b11156120115760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b606482015260840161098c565b61201b8282612a6c565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120485750805b80156120575750600b5460ff16155b801561206e5750601754600160201b900460ff1615155b801561209257506001600160a01b03851660009081526016602052604090205460ff165b80156120b757506001600160a01b03861660009081526013602052604090205460ff16155b80156120dc57506001600160a01b03851660009081526013602052604090205460ff16155b1561210157600b805460ff191660011790556120f6612c79565b600b805460ff191690555b600b5460009060ff161580156121205750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061216257506001600160a01b03861660009081526013602052604090205460ff165b1561216b575060005b8080156121835750601754600160201b900460ff1615155b1561224a576017546000906064906121a590600160201b900460ff1688613492565b6121af91906134c7565b6017549091506000906064906121ce9062010000900460ff1689613492565b6121d891906134c7565b90506121e48288613620565b96506121f1893084612960565b80156122475761220130826123aa565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612255878787612960565b6008546001600160a01b031663e30443bc88612286816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122cc57600080fd5b505af19250505080156122dd575060015b506008546001600160a01b031663e30443bc8761230f816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235557600080fd5b505af1925050508015612366575060015b5050505050505050565b600081848411156123945760405162461bcd60e51b815260040161098c9190613221565b5060006123a18486613620565b95945050505050565b6001600160a01b03821661240a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161098c565b61244781604051806060016040528060228152602001613766602291396001600160a01b0385166000908152600260205260409020549190612370565b6001600160a01b03831660009081526002602052604090205560045461246d9082612f6a565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d6833981519152916125279160481b90613637565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125de57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d6833981519152916125bb9160481b90613637565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612674576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d68339815191529161264f9160481b90613637565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d6833981519152916126e89160481b90613637565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279857604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d68339815191529161277e9160481b90613637565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461282b576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d68339815191529161280a9160481b90613637565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128bf576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d68339815191529161289b9160481b90613637565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d6833981519152916129329160481b90613637565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129865760405162461bcd60e51b815260040161098c90613598565b6001600160a01b0382166129ac5760405162461bcd60e51b815260040161098c906135dd565b6129e981604051806060016040528060268152602001613788602691396001600160a01b0386166000908152600260205260409020549190612370565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a189082611b85565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d039085815260200190565b6017805463ffffffff191690558115612adc576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3f576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b4b575081155b15612bad576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd7916101008104821691166134f8565b612be191906134f8565b612beb91906134f8565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b62565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612cae911686613492565b612cb891906134c7565b612cc291906134c7565b60175490915060009060ff600160201b8204811691612cea9163010000009091041686613492565b612cf491906134c7565b90506000612d028284613580565b612d0c9086613620565b9050612d1781612fac565b6000612d238547613620565b60175490915060009060ff63010000008204811691620100008104821691612d4e916002911661364e565b612d5891906134f8565b612d6291906134f8565b601754612d799190600160201b900460ff16613670565b60175460ff91821692506000916002918491612d96911686613492565b612da091906134c7565b612daa91906134c7565b90506000612db88285613620565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612df3573d6000803e3d6000fd5b508615612e4657612e048783613106565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebe91906134db565b90508015612f5e57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0c57600080fd5b505af1158015612f20573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5591815260200190565b60405180910390a15b50505050505050505050565b6000611be483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612370565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe157612fe1613693565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e91906136a9565b8160018151811061307157613071613693565b6001600160a01b0392831660209182029290920101526007546130979130911684611beb565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130d09085906000908690309042906004016136c6565b600060405180830381600087803b1580156130ea57600080fd5b505af11580156130fe573d6000803e3d6000fd5b505050505050565b60075461311e9030906001600160a01b031684611beb565b671bc16d674ec8000047111561318c5760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b606482015260840161098c565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131fc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613737565b600060208083528351808285015260005b8181101561324e57858101830151858201604001528201613232565b81811115613260576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329e57600080fd5b82356132a981613276565b946020939093013593505050565b6000602082840312156132c957600080fd5b5035919050565b6000806000606084860312156132e557600080fd5b83356132f081613276565b9250602084013561330081613276565b929592945050506040919091013590565b60006020828403121561332357600080fd5b8135611be481613276565b803560ff8116811461333f57600080fd5b919050565b6000806000806080858703121561335a57600080fd5b6133638561332e565b93506133716020860161332e565b925061337f6040860161332e565b915061338d6060860161332e565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b957600080fd5b82356133c481613276565b915060208301356133d481613398565b809150509250929050565b600080604083850312156133f257600080fd5b82356133fd81613276565b915060208301356133d481613276565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061345657607f821691505b60208210810361347657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134ac576134ac61347c565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d6576134d66134b1565b500490565b6000602082840312156134ed57600080fd5b8151611be481613398565b600060ff821660ff84168060ff038211156135155761351561347c565b019392505050565b60006020828403121561352f57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b600082198211156135935761359361347c565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136325761363261347c565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613661576136616134b1565b8060ff84160491505092915050565b600060ff821660ff84168082101561368a5761368a61347c565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136bb57600080fd5b8151611be481613276565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137165784516001600160a01b0316835293830193918301916001016136f1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365c1b18a7bad1555503f3fdd6c0a24223cb2c97bc1b50cbc6385c33eb2cc6edf6f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d92052b57beeff3d0b76b67c734bad94a04330f4d7a32f0643d0bdd989667cb264736f6c634300080f0033

Deployed Bytecode Sourcemap

17256:24022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23097:79;;;;;;;;;;;;;:::i;:::-;;31271:349;;;;;;;;;;-1:-1:-1;31472:23:0;;;;;;;31510:22;;;;;;-1:-1:-1;;;31547:18:0;;;;;-1:-1:-1;;;31580:21:0;;;31271:349;;;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;;;;409:17;;;404:2;389:18;;382:45;216:3;201:19;31271:349:0;;;;;;;;17567:28;;;;;;;;;;-1:-1:-1;17567:28:0;;;;-1:-1:-1;;;17567:28:0;;;;;;;;;603:14:1;;596:22;578:41;;566:2;551:18;17567:28:0;438:187:1;7971:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9026:210::-;;;;;;;;;;-1:-1:-1;9026:210:0;;;;;:::i;:::-;;:::i;29542:347::-;;;;;;;;;;-1:-1:-1;29542:347:0;;;;;:::i;:::-;;:::i;17529:29::-;;;;;;;;;;-1:-1:-1;17529:29:0;;;;-1:-1:-1;;;;;17529:29:0;;;;;;-1:-1:-1;;;;;2062:32:1;;;2044:51;;2032:2;2017:18;17529:29:0;1873:228:1;17301:30:0;;;;;;;;;;-1:-1:-1;17301:30:0;;;;-1:-1:-1;;;;;17301:30:0;;;30460:197;;;;;;;;;;-1:-1:-1;30460:197:0;;;;;:::i;:::-;;:::i;8292:108::-;;;;;;;;;;-1:-1:-1;8380:12:0;;8292:108;;;2936:25:1;;;2924:2;2909:18;8292:108:0;2790:177:1;28229:331:0;;;;;;;;;;-1:-1:-1;28229:331:0;;;;;:::i;:::-;;:::i;9244:454::-;;;;;;;;;;-1:-1:-1;9244:454:0;;;;;:::i;:::-;;:::i;28568:318::-;;;;;;;;;;-1:-1:-1;28568:318:0;;;;;:::i;:::-;;:::i;8191:93::-;;;;;;;;;;-1:-1:-1;8191:93:0;;8274:2;3114:36:1;;3102:2;3087:18;8191:93:0;2972:184:1;24366:128:0;;;;;;;;;;-1:-1:-1;24366:128:0;;;;;:::i;:::-;;:::i;9706:300::-;;;;;;;;;;-1:-1:-1;9706:300:0;;;;;:::i;:::-;;:::i;30665:81::-;;;;;;;;;;-1:-1:-1;30665:81:0;;;;;:::i;:::-;;:::i;17960:30::-;;;;;;;;;;-1:-1:-1;17960:30:0;;;;-1:-1:-1;;;;;17960:30:0;;;17338:38;;;;;;;;;;;;;;;17809:33;;;;;;;;;;-1:-1:-1;17809:33:0;;;;;;;;;;;29438:96;;;;;;;;;;;;;:::i;29256:174::-;;;;;;;;;;-1:-1:-1;29256:174:0;;;;;:::i;:::-;;:::i;27000:830::-;;;;;;;;;;-1:-1:-1;27000:830:0;;;;;:::i;:::-;;:::i;31092:171::-;;;;;;;;;;-1:-1:-1;31092:171:0;;;;;:::i;:::-;;:::i;31628:354::-;;;;;;;;;;-1:-1:-1;31830:24:0;;;;;;;;;31869:23;;;;;;-1:-1:-1;;;31907:19:0;;;;;-1:-1:-1;;;31941:22:0;;;31628:354;;8408:177;;;;;;;;;;-1:-1:-1;8408:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8559:18:0;8527:7;8559:18;;;:9;:18;;;;;;;8408:177;7066:148;;;;;;;;;;;;;:::i;24237:121::-;;;;;;;;;;;;;:::i;24918:391::-;;;;;;;;;;-1:-1:-1;24918:391:0;;;;;:::i;:::-;;:::i;24502:408::-;;;;;;;;;;-1:-1:-1;24502:408:0;;;;;:::i;:::-;;:::i;17721:50::-;;;;;;;;;;;;;;;;6852:79;;;;;;;;;;-1:-1:-1;6890:7:0;6917:6;-1:-1:-1;;;;;6917:6:0;6852:79;;8079:104;;;;;;;;;;;;;:::i;26182:810::-;;;;;;;;;;-1:-1:-1;26182:810:0;;;;;:::i;:::-;;:::i;10014:400::-;;;;;;;;;;-1:-1:-1;10014:400:0;;;;;:::i;:::-;;:::i;30900:184::-;;;;;;;;;;-1:-1:-1;30900:184:0;;;;;:::i;:::-;;:::i;8593:216::-;;;;;;;;;;-1:-1:-1;8593:216:0;;;;;:::i;:::-;;:::i;17660:54::-;;;;;;;;;;;;;;;;28894:354;;;;;;;;;;-1:-1:-1;28894:354:0;;;;;:::i;:::-;;:::i;18760:57::-;;;;;;;;;;-1:-1:-1;18760:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30754:138;;;;;;;;;;;;;:::i;27838:383::-;;;;;;;;;;-1:-1:-1;27838:383:0;;;;;:::i;:::-;;:::i;23874:355::-;;;;;;;;;;-1:-1:-1;23874:355:0;;;;;:::i;:::-;;:::i;17849:65::-;;;;;;;;;;;;;;;;23626:240;;;;;;;;;;-1:-1:-1;23626:240:0;;;;;:::i;:::-;;:::i;25317:833::-;;;;;;;;;;-1:-1:-1;25317:833:0;;;;;:::i;:::-;;:::i;17923:30::-;;;;;;;;;;-1:-1:-1;17923:30:0;;;;-1:-1:-1;;;;;17923:30:0;;;8817:201;;;;;;;;;;-1:-1:-1;8817:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;8983:18:0;;;8951:7;8983:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8817:201;7222:305;;;;;;;;;;-1:-1:-1;7222:305:0;;;;;:::i;:::-;;:::i;23097:79::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;;;;;;;;;23145:16:::1;:23:::0;;-1:-1:-1;;;;23145:23:0::1;-1:-1:-1::0;;;23145:23:0::1;::::0;;23097:79::o;7971:100::-;8025:13;8058:5;8051:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7971:100;:::o;9026:210::-;9145:4;9167:39;6337:10;9190:7;9199:6;9167:8;:39::i;:::-;-1:-1:-1;9224:4:0;9026:210;;;;:::o;29542:347::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;29645:21:::1;29636:6;:30;29614:118;;;::::0;-1:-1:-1;;;29614:118:0;;6031:2:1;29614:118:0::1;::::0;::::1;6013:21:1::0;6070:2;6050:18;;;6043:30;6109:34;6089:18;;;6082:62;-1:-1:-1;;;6160:18:1;;;6153:36;6206:19;;29614:118:0::1;5829:402:1::0;29614:118:0::1;29744:12;6917:6:::0;;29762:40:::1;::::0;-1:-1:-1;;;;;6917:6:0;;;;29791;;29744:12;29762:40;29744:12;29762:40;29791:6;6917;29762:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29743:59;;;29817:7;29813:69;;;29846:24;::::0;2936:25:1;;;29846:24:0::1;::::0;2924:2:1;2909:18;29846:24:0::1;;;;;;;;29813:69;29603:286;29542:347:::0;:::o;30460:197::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;30599:50:::1;30616:6;30633;30642;30599:8;:50::i;:::-;30460:197:::0;;;:::o;28229:331::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;28375:4:::1;28367;28346:13;8380:12:::0;;;8292:108;28346:13:::1;:17;::::0;28362:1:::1;28346:17;:::i;:::-;28345:26;;;;:::i;:::-;28344:35;;;;:::i;:::-;28332:8;:47;;28310:144;;;::::0;-1:-1:-1;;;28310:144:0;;7210:2:1;28310:144:0::1;::::0;::::1;7192:21:1::0;7249:2;7229:18;;;7222:30;7288:34;7268:18;;;7261:62;-1:-1:-1;;;7339:18:1;;;7332:45;7394:19;;28310:144:0::1;7008:411:1::0;28310:144:0::1;28507:11;::::0;28470:49:::1;::::0;28497:8;;28470:49:::1;::::0;;;::::1;28530:11;:22:::0;28229:331::o;9244:454::-;9384:4;9401:36;9411:6;9419:9;9430:6;9401:9;:36::i;:::-;9448:220;9471:6;6337:10;9519:138;9575:6;9519:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9519:19:0;;;;;;:11;:19;;;;;;;;6337:10;9519:33;;;;;;;;;;:37;:138::i;:::-;9448:8;:220::i;:::-;-1:-1:-1;9686:4:0;9244:454;;;;;:::o;28568:318::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;28709:4:::1;28701;28680:13;8380:12:::0;;;8292:108;28680:13:::1;:17;::::0;28696:1:::1;28680:17;:::i;:::-;28679:26;;;;:::i;:::-;28678:35;;;;:::i;:::-;28666:8;:47;;28644:133;;;::::0;-1:-1:-1;;;28644:133:0;;7626:2:1;28644:133:0::1;::::0;::::1;7608:21:1::0;7665:2;7645:18;;;7638:30;7704:34;7684:18;;;7677:62;-1:-1:-1;;;7755:18:1;;;7748:34;7799:19;;28644:133:0::1;7424:400:1::0;28644:133:0::1;28825:15;::::0;28793:48:::1;::::0;28815:8;;28793:48:::1;::::0;;;::::1;28852:15;:26:::0;28568:318::o;24366:128::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;24443:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;24443:43:0;;-1:-1:-1;;;;;2062:32:1;;;24443:43:0::1;::::0;::::1;2044:51:1::0;24443:13:0;;::::1;::::0;:34:::1;::::0;2017:18:1;;24443:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24366:128:::0;:::o;9706:300::-;6337:10;9821:4;9915:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9915:34:0;;;;;;;;;;9821:4;;9843:133;;9893:7;;9915:50;;9954:10;9915:38;:50::i;30665:81::-;30714:24;30720:10;30732:5;30714;:24::i;:::-;30665:81;:::o;29438:96::-;29475:13;;:51;;-1:-1:-1;;;29475:51:0;;29507:10;29475:51;;;8013::1;29475:13:0;8080:18:1;;;8073:50;-1:-1:-1;;;;;29475:13:0;;;;:23;;7986:18:1;;29475:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29256:174::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;29371:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;29371:51:0;;::::1;::::0;::::1;2936:25:1::0;;;-1:-1:-1;;;;;29371:13:0;;::::1;::::0;:41:::1;::::0;2909:18:1;;29371:51:0::1;2790:177:1::0;27000:830:0;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;27366:17;27328:14;27243:61:::1;27286:18:::0;27243:19;:61:::1;:::i;:::-;:99;;;;:::i;:::-;:140;;;;:::i;:::-;27222:161;;:1;:161;27200:235;;;::::0;-1:-1:-1;;;27200:235:0;;8795:2:1;27200:235:0::1;::::0;::::1;8777:21:1::0;8834:2;8814:18;;;8807:30;8873:26;8853:18;;;8846:54;8917:18;;27200:235:0::1;8593:348:1::0;27200:235:0::1;27446:182;27484:5;27504:19;27538:18;27571:14;27600:17;27446:23;:182::i;:::-;27644:178;::::0;-1:-1:-1;;;9148:28:1;;9201:2;9192:12;27644:178:0::1;;::::0;;;;;::::1;::::0;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;409:17;;404:2;389:18;;382:45;27644:178:0;;;;::::1;::::0;;;;;216:3:1;27644:178:0;;::::1;27000:830:::0;;;;:::o;31092:171::-;31223:13;;:32;;-1:-1:-1;;;31223:32:0;;-1:-1:-1;;;;;2062:32:1;;;31223::0;;;2044:51:1;31191:7:0;;31223:13;;:23;;2017:18:1;;31223:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31216:39;31092:171;-1:-1:-1;;31092:171:0:o;7066:148::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;7173:1:::1;7157:6:::0;;7136:40:::1;::::0;-1:-1:-1;;;;;7157:6:0;;::::1;::::0;7136:40:::1;::::0;7173:1;;7136:40:::1;7204:1;7187:19:::0;;-1:-1:-1;;;;;;7187:19:0::1;::::0;;7066:148::o;24237:121::-;24289:4;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;-1:-1:-1;24306:14:0::1;:22:::0;;-1:-1:-1;;24306:22:0::1;::::0;;:14:::1;24237:121:::0;:::o;24918:391::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25060:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;25038:142:::1;;;;-1:-1:-1::0;;;25038:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25191:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25191:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25256:45;;578:41:1;;;25256:45:0::1;::::0;551:18:1;25256:45:0::1;;;;;;;;24918:391:::0;;:::o;24502:408::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24649:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24627:147:::1;;;;-1:-1:-1::0;;;24627:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24785:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;24785:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24855:47;;578:41:1;;;24855:47:0::1;::::0;551:18:1;24855:47:0::1;438:187:1::0;8079:104:0;8135:13;8168:7;8161:14;;;;;:::i;26182:810::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;26540:16;26503:13;26420:59:::1;26462:17:::0;26420:18;:59:::1;:::i;:::-;:96;;;;:::i;:::-;:136;;;;:::i;:::-;26399:157;;:1;:157;26377:230;;;::::0;-1:-1:-1;;;26377:230:0;;10017:2:1;26377:230:0::1;::::0;::::1;9999:21:1::0;10056:2;10036:18;;;10029:30;10095:25;10075:18;;;10068:53;10138:18;;26377:230:0::1;9815:347:1::0;26377:230:0::1;26618:177;26655:5;26675:18;26708:17;26740:13;26768:16;26618:22;:177::i;:::-;26811:173;::::0;-1:-1:-1;;;10369:27:1;;10421:2;10412:12;26811:173:0::1;10167:263:1::0;10014:400:0;10134:4;10156:228;6337:10;10206:7;10228:145;10285:15;10228:145;;;;;;;;;;;;;;;;;6337:10;10228:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10228:34:0;;;;;;;;;;;;:38;:145::i;30900:184::-;31031:13;;:45;;-1:-1:-1;;;31031:45:0;;-1:-1:-1;;;;;2062:32:1;;;31031:45:0;;;2044:51:1;30999:7:0;;31031:13;;:36;;2017:18:1;;31031:45:0;1873:228:1;8593:216:0;8715:4;8737:42;6337:10;8761:9;8772:6;8737:9;:42::i;28894:354::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;29012:23:::1;;29000:8;:35:::0;28978:136:::1;;;::::0;-1:-1:-1;;;28978:136:0;;10637:2:1;28978:136:0::1;::::0;::::1;10619:21:1::0;10676:2;10656:18;;;10649:30;10715:34;10695:18;;;10688:62;-1:-1:-1;;;10766:18:1;;;10759:49;10825:19;;28978:136:0::1;10435:415:1::0;28978:136:0::1;29171:23;::::0;29130:65:::1;::::0;29161:8;;29130:65:::1;::::0;;;::::1;29206:23;:34:::0;28894:354::o;30754:138::-;30843:13;;:41;;;-1:-1:-1;;;30843:41:0;;;;30816:7;;-1:-1:-1;;;;;30843:13:0;;:39;;:41;;;;;;;;;;;;;;:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30836:48;;30754:138;:::o;27838:383::-;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;27958:15:::1;::::0;-1:-1:-1;;;;;27958:15:0;;::::1;27936:38:::0;;::::1;::::0;27914:123:::1;;;::::0;-1:-1:-1;;;27914:123:0;;11057:2:1;27914:123:0::1;::::0;::::1;11039:21:1::0;11096:2;11076:18;;;11069:30;11135:34;11115:18;;;11108:62;-1:-1:-1;;;11186:18:1;;;11179:33;11229:19;;27914:123:0::1;10855:399:1::0;27914:123:0::1;28095:15;::::0;28053:59:::1;::::0;-1:-1:-1;;;;;28095:15:0;;::::1;::::0;28053:59;::::1;::::0;::::1;::::0;28095:15:::1;::::0;28053:59:::1;28123:15;:37:::0;;-1:-1:-1;;;;;;28123:37:0::1;-1:-1:-1::0;;;;;28123:37:0;;::::1;::::0;;::::1;::::0;;;28171:13:::1;::::0;:42:::1;::::0;-1:-1:-1;;;28171:42:0;;::::1;::::0;::::1;2044:51:1::0;;;;28171:13:0;;::::1;::::0;:30:::1;::::0;2017:18:1;;28171:42:0::1;1873:228:1::0;23874:355:0;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24006:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;23984:132:::1;;;::::0;-1:-1:-1;;;23984:132:0;;11461:2:1;23984:132:0::1;::::0;::::1;11443:21:1::0;11500:2;11480:18;;;11473:30;11539:34;11519:18;;;11512:62;-1:-1:-1;;;11590:18:1;;;11583:41;11641:19;;23984:132:0::1;11259:407:1::0;23984:132:0::1;-1:-1:-1::0;;;;;24127:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;24127:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24181:40;;578:41:1;;;24181:40:0::1;::::0;551:18:1;24181:40:0::1;438:187:1::0;23626:240:0;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23744:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;23744:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23808:50;;578:41:1;;;23808:50:0::1;::::0;551:18:1;23808:50:0::1;438:187:1::0;25317:833:0;6979:6;;-1:-1:-1;;;;;6979:6:0;6337:10;6979:22;6971:67;;;;-1:-1:-1;;;6971:67:0;;;;;;;:::i;:::-;25450:15:::1;::::0;-1:-1:-1;;;;;25450:37:0;;::::1;:15:::0;::::1;:37;25446:400;;-1:-1:-1::0;;;;;25530:32:0;::::1;25504:125;;;::::0;-1:-1:-1;;;25504:125:0;;11873:2:1;25504:125:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:33;11931:18;;;11924:61;12002:18;;25504:125:0::1;11671:355:1::0;25504:125:0::1;25753:15;::::0;25649:134:::1;::::0;-1:-1:-1;;;12233:30:1;;-1:-1:-1;;;;;25753:15:0;;::::1;::::0;25649:134;::::1;::::0;12288:2:1;12279:12;25649:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;25798:15;:36:::0;;-1:-1:-1;;;;;;25798:36:0::1;-1:-1:-1::0;;;;;25798:36:0;::::1;;::::0;;25446:400:::1;25862:15;::::0;-1:-1:-1;;;;;25862:37:0;;::::1;:15:::0;::::1;:37;25858:285;;-1:-1:-1::0;;;;;25924:32:0;::::1;25916:76;;;::::0;-1:-1:-1;;;25916:76:0;;12504:2:1;25916:76:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:33;12562:18;;;12555:61;12633:18;;25916:76:0::1;12302:355:1::0;25916:76:0::1;26064:15;::::0;26012:68:::1;::::0;-1:-1:-1;;;12864:30:1;;-1:-1:-1;;;;;26064:15:0;;::::1;::::0;26012:68;::::1;::::0;12919:2:1;12910:12;26012:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26095:15;:36:::0;;-1:-1:-1;;;;;26095:36:0;::::1;-1:-1:-1::0;;;;;;26095:36:0;;::::1;;::::0;;25317:833;;:::o;7222:305::-;-1:-1:-1;;;;;7315:27:0;;7335:6;7315:27;;;;:56;;-1:-1:-1;7362:9:0;;-1:-1:-1;;;;;7362:9:0;6337:10;-1:-1:-1;;;;;7346:25:0;;7315:56;7293:144;;;;-1:-1:-1;;;7293:144:0;;13135:2:1;7293:144:0;;;13117:21:1;13174:2;13154:18;;;13147:30;13213:34;13193:18;;;13186:62;-1:-1:-1;;;13264:18:1;;;13257:36;13310:19;;7293:144:0;12933:402:1;7293:144:0;7474:6;;;7453:38;;-1:-1:-1;;;;;7453:38:0;;;;7474:6;;;7453:38;;;7502:6;:17;;-1:-1:-1;;;;;;7502:17:0;-1:-1:-1;;;;;7502:17:0;;;;;;;;;;7222:305::o;3044:181::-;3102:7;;3134:5;3138:1;3134;:5;:::i;:::-;3122:17;;3163:1;3158;:6;;3150:46;;;;-1:-1:-1;;;3150:46:0;;13675:2:1;3150:46:0;;;13657:21:1;13714:2;13694:18;;;13687:30;13753:29;13733:18;;;13726:57;13800:18;;3150:46:0;13473:351:1;3150:46:0;3216:1;3044:181;-1:-1:-1;;;3044:181:0:o;11877:378::-;-1:-1:-1;;;;;12013:19:0;;12005:68;;;;-1:-1:-1;;;12005:68:0;;14031:2:1;12005:68:0;;;14013:21:1;14070:2;14050:18;;;14043:30;14109:34;14089:18;;;14082:62;-1:-1:-1;;;14160:18:1;;;14153:34;14204:19;;12005:68:0;13829:400:1;12005:68:0;-1:-1:-1;;;;;12092:21:0;;12084:68;;;;-1:-1:-1;;;12084:68:0;;14436:2:1;12084:68:0;;;14418:21:1;14475:2;14455:18;;;14448:30;14514:34;14494:18;;;14487:62;-1:-1:-1;;;14565:18:1;;;14558:32;14607:19;;12084:68:0;14234:398:1;12084:68:0;-1:-1:-1;;;;;12163:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12215:32;;2936:25:1;;;12215:32:0;;2909:18:1;12215:32:0;;;;;;;;11877:378;;;:::o;31990:3041::-;-1:-1:-1;;;;;32122:18:0;;32114:68;;;;-1:-1:-1;;;32114:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32201:16:0;;32193:64;;;;-1:-1:-1;;;32193:64:0;;;;;;;:::i;:::-;32274:6;32284:1;32274:11;32270:93;;32302:28;32318:4;32324:2;32328:1;32302:15;:28::i;32270:93::-;-1:-1:-1;;;;;32394:31:0;;;32375:16;32394:31;;;:25;:31;;;;;;;;;32454:29;;;;;;;;;32515:35;;;:29;:35;;;;;;32394:31;;;;;32454:29;;;;32515:35;32514:36;:87;;;;-1:-1:-1;;;;;;32568:33:0;;;;;;:29;:33;;;;;;;;32567:34;32514:87;32496:1229;;;32636:16;;-1:-1:-1;;;32636:16:0;;;;32628:59;;;;-1:-1:-1;;;32628:59:0;;15649:2:1;32628:59:0;;;15631:21:1;15688:2;15668:18;;;15661:30;15727:32;15707:18;;;15700:60;15777:18;;32628:59:0;15447:354:1;32628:59:0;32706:14;;;;;;;32702:1012;;;-1:-1:-1;;;;;32768:38:0;;;;;;:34;:38;;;;;;;;32767:39;:105;;;;-1:-1:-1;;;;;;32832:40:0;;;;;;:34;:40;;;;;;;;32831:41;32767:105;32741:675;;;32919:11;32915:232;;;33007:15;;32997:6;:25;;32959:164;;;;-1:-1:-1;;;32959:164:0;;16008:2:1;32959:164:0;;;15990:21:1;16047:2;16027:18;;;16020:30;16086:34;16066:18;;;16059:62;-1:-1:-1;;;16137:18:1;;;16130:39;16186:19;;32959:164:0;15806:405:1;32959:164:0;33175:10;33171:226;;;33262:11;;33252:6;:21;;33214:159;;;;-1:-1:-1;;;33214:159:0;;16418:2:1;33214:159:0;;;16400:21:1;16457:2;16437:18;;;16430:30;16496:34;16476:18;;;16469:62;-1:-1:-1;;;16547:18:1;;;16540:38;16595:19;;33214:159:0;16216:404:1;33214:159:0;-1:-1:-1;;;;;33441:33:0;;;;;;:29;:33;;;;;;;;33436:263;;33561:15;;33550:6;33534:13;33544:2;-1:-1:-1;;;;;8559:18:0;8527:7;8559:18;;;:9;:18;;;;;;;8408:177;33534:13;:22;;;;:::i;:::-;33533:43;;33499:180;;;;-1:-1:-1;;;33499:180:0;;16827:2:1;33499:180:0;;;16809:21:1;16866:2;16846:18;;;16839:30;16905:34;16885:18;;;16878:62;-1:-1:-1;;;16956:18:1;;;16949:49;17015:19;;33499:180:0;16625:415:1;33499:180:0;33737:37;33750:11;33763:10;33737:12;:37::i;:::-;33828:23;;33818:4;33785:12;8559:18;;;:9;:18;;;;;;33882:16;;-1:-1:-1;;33800:51:0;;-1:-1:-1;;;33882:16:0;;;;:40;;;;;33915:7;33882:40;:67;;;;-1:-1:-1;33940:9:0;;;;33939:10;33882:67;:97;;;;-1:-1:-1;33966:9:0;;-1:-1:-1;;;33966:9:0;;;;:13;;33882:97;:143;;;;-1:-1:-1;;;;;;33996:29:0;;;;;;:25;:29;;;;;;;;33882:143;:185;;;;-1:-1:-1;;;;;;34043:24:0;;;;;;:18;:24;;;;;;;;34042:25;33882:185;:225;;;;-1:-1:-1;;;;;;34085:22:0;;;;;;:18;:22;;;;;;;;34084:23;33882:225;33864:362;;;34134:9;:16;;-1:-1:-1;;34134:16:0;34146:4;34134:16;;;34165:17;:15;:17::i;:::-;34197:9;:17;;-1:-1:-1;;34197:17:0;;;33864:362;34254:9;;34238:12;;34254:9;;34253:10;:30;;;;-1:-1:-1;34267:16:0;;-1:-1:-1;;;34267:16:0;;;;34253:30;-1:-1:-1;;;;;34300:24:0;;;;;;:18;:24;;;;;;34238:45;;-1:-1:-1;34300:24:0;;;:50;;-1:-1:-1;;;;;;34328:22:0;;;;;;:18;:22;;;;;;;;34300:50;34296:98;;;-1:-1:-1;34377:5:0;34296:98;34408:7;:24;;;;-1:-1:-1;34419:9:0;;-1:-1:-1;;;34419:9:0;;;;:13;;34408:24;34404:414;;;34473:9;;34449:11;;34486:3;;34464:18;;-1:-1:-1;;;34473:9:0;;;;34464:6;:18;:::i;:::-;34463:26;;;;:::i;:::-;34535:8;;34449:40;;-1:-1:-1;34504:18:0;;34547:3;;34526:17;;34535:8;;;;;34526:6;:17;:::i;:::-;34525:25;;;;:::i;:::-;34504:46;-1:-1:-1;34574:12:0;34583:3;34574:6;:12;:::i;:::-;34565:21;;34601:41;34617:4;34631;34638:3;34601:15;:41::i;:::-;34663:14;;34659:148;;34698:38;34718:4;34725:10;34698:11;:38::i;:::-;34770:8;;34760:31;;;34770:8;;;;;;17345:36:1;;17412:2;17397:18;;17390:34;;;34760:31:0;;17318:18:1;34760:31:0;;;;;;;34659:148;34434:384;;34404:414;34828:33;34844:4;34850:2;34854:6;34828:15;:33::i;:::-;34878:13;;-1:-1:-1;;;;;34878:13:0;:24;34911:4;34918:15;34911:4;-1:-1:-1;;;;;8559:18:0;8527:7;8559:18;;;:9;:18;;;;;;;8408:177;34918:15;34878:56;;-1:-1:-1;;;;;;34878:56:0;;;;;;;-1:-1:-1;;;;;17643:32:1;;;34878:56:0;;;17625:51:1;17692:18;;;17685:34;17598:18;;34878:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34874:72;34960:13;;-1:-1:-1;;;;;34960:13:0;:24;34993:2;34998:13;34993:2;-1:-1:-1;;;;;8559:18:0;8527:7;8559:18;;;:9;:18;;;;;;;8408:177;34998:13;34960:52;;-1:-1:-1;;;;;;34960:52:0;;;;;;;-1:-1:-1;;;;;17643:32:1;;;34960:52:0;;;17625:51:1;17692:18;;;17685:34;17598:18;;34960:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34956:68;32103:2928;;;;31990:3041;;;:::o;3377:226::-;3497:7;3533:12;3525:6;;;;3517:29;;;;-1:-1:-1;;;3517:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3557:9:0;3569:5;3573:1;3569;:5;:::i;:::-;3557:17;3377:226;-1:-1:-1;;;;;3377:226:0:o;11418:451::-;-1:-1:-1;;;;;11502:21:0;;11494:67;;;;-1:-1:-1;;;11494:67:0;;17932:2:1;11494:67:0;;;17914:21:1;17971:2;17951:18;;;17944:30;18010:34;17990:18;;;17983:62;-1:-1:-1;;;18061:18:1;;;18054:31;18102:19;;11494:67:0;17730:397:1;11494:67:0;11653:105;11690:6;11653:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11653:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11632:18:0;;;;;;:9;:18;;;;;:126;11784:12;;:24;;11801:6;11784:16;:24::i;:::-;11769:12;:39;11824:37;;2936:25:1;;;11850:1:0;;-1:-1:-1;;;;;11824:37:0;;;;;2924:2:1;2909:18;11824:37:0;;;;;;;11418:451;;:::o;36208:1540::-;36447:22;;;;:45;;;;:22;;;;;:45;36443:331;;36514:189;;-1:-1:-1;;;18334:33:1;;18392:2;18383:12;36514:189:0;;;;;;;;36594:22;;;;36674:14;;36514:189;;36594:22;;;;;;;;36514:189;;;;-1:-1:-1;;;;;;;;;;;36514:189:0;;;36674:14;;;36514:189;:::i;:::-;;;;;;;;36718:22;;;:44;;-1:-1:-1;;36718:44:0;;;;;;;;;36443:331;36788:21;;;;:43;;;;:21;;;;;:43;36784:324;;36853:186;;-1:-1:-1;;;18822:32:1;;18879:2;18870:12;36853:186:0;;;;;;;;36932:21;;;;37010:14;;36853:186;;36932:21;;;;;;;;36853:186;;;;-1:-1:-1;;;;;;;;;;;36853:186:0;;;37010:14;;;36853:186;:::i;:::-;;;;;;;;37054:21;;;:42;;-1:-1:-1;;37054:42:0;;;;;;;;;36784:324;37122:17;;;;:35;;;;-1:-1:-1;;;37122:17:0;;;;:35;37118:296;;37179:174;;-1:-1:-1;;;19095:28:1;;19148:2;19139:12;37179:174:0;;;;;;;;37254:17;;;;37324:14;;37179:174;;37254:17;-1:-1:-1;;;37254:17:0;;;;;;37179:174;;;;-1:-1:-1;;;;;;;;;;;37179:174:0;;;37324:14;;;37179:174;:::i;:::-;;;;;;;;37368:17;;;:34;;-1:-1:-1;;37368:34:0;-1:-1:-1;;;37368:34:0;;;;;;;37118:296;37428:20;;;;:41;;;;-1:-1:-1;;;37428:20:0;;;;:41;37424:317;;37491:183;;-1:-1:-1;;;19364:31:1;;19420:2;19411:12;37491:183:0;;;;;;;;37569:20;;;;37645:14;;37491:183;;37569:20;-1:-1:-1;;;37569:20:0;;;;;;37491:183;;;;-1:-1:-1;;;;;;;;;;;37491:183:0;;;37645:14;;;37491:183;:::i;:::-;;;;;;;;37689:20;;;:40;;;;;-1:-1:-1;;;37689:40:0;-1:-1:-1;;37689:40:0;;;;;;36208:1540;;;;;:::o;37756:1507::-;37990:21;;;;:43;;;;:21;;:43;37986:324;;38055:186;;-1:-1:-1;;;19636:32:1;;19693:2;19684:12;38055:186:0;;;;;;;;38134:21;;;;38212:14;;38055:186;;38134:21;;;;;38055:186;;;;-1:-1:-1;;;;;;;;;;;38055:186:0;;;38212:14;;;38055:186;:::i;:::-;;;;;;;;38256:21;;;:42;;-1:-1:-1;;38256:42:0;;;;;;;37986:324;38324:20;;;;:41;;;;:20;;;;;:41;38320:317;;38387:183;;-1:-1:-1;;;19909:31:1;;19965:2;19956:12;38387:183:0;;;;;;;;38465:20;;;;38541:14;;38387:183;;38465:20;;;;;;;;38387:183;;;;-1:-1:-1;;;;;;;;;;;38387:183:0;;;38541:14;;;38387:183;:::i;:::-;;;;;;;;38585:20;;;:40;;-1:-1:-1;;38585:40:0;;;;;;;;;38320:317;38651:16;;;;:33;;;;-1:-1:-1;;;38651:16:0;;;;:33;38647:289;;38706:171;;-1:-1:-1;;;20181:27:1;;20233:2;20224:12;38706:171:0;;;;;;;;38780:16;;;;38848:14;;38706:171;;38780:16;-1:-1:-1;;;38780:16:0;;;;;;38706:171;;;;-1:-1:-1;;;;;;;;;;;38706:171:0;;;38848:14;;;38706:171;:::i;:::-;;;;;;;;38892:16;;;:32;;-1:-1:-1;;38892:32:0;-1:-1:-1;;;38892:32:0;;;;;;;38647:289;38950:19;;;;:39;;;;-1:-1:-1;;;38950:19:0;;;;:39;38946:310;;39011:180;;-1:-1:-1;;;20449:30:1;;20504:2;20495:12;39011:180:0;;;;;;;;39088:19;;;;39162:14;;39011:180;;39088:19;-1:-1:-1;;;39088:19:0;;;;;;39011:180;;;;-1:-1:-1;;;;;;;;;;;39011:180:0;;;39162:14;;;39011:180;:::i;:::-;;;;;;;;39206:19;;;:38;;;;;-1:-1:-1;;;39206:38:0;-1:-1:-1;;39206:38:0;;;;;;37756:1507;;;;;:::o;10422:606::-;-1:-1:-1;;;;;10562:20:0;;10554:70;;;;-1:-1:-1;;;10554:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10643:23:0;;10635:71;;;;-1:-1:-1;;;10635:71:0;;;;;;;:::i;:::-;10795:108;10831:6;10795:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10795:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;10775:17:0;;;;;;;:9;:17;;;;;;:128;;;;10937:20;;;;;;;:32;;10962:6;10937:24;:32::i;:::-;-1:-1:-1;;;;;10914:20:0;;;;;;;:9;:20;;;;;;;:55;;;;10985:35;;;;;;;;;;11013:6;2936:25:1;;2924:2;2909:18;;2790:177;35039:1161:0;35115:13;:17;;-1:-1:-1;;35193:15:0;;;35221:229;;;;35269:23;;35253:13;:39;;35269:23;;;;-1:-1:-1;;35307:37:0;;;;;;;35269:23;35322:22;;;;;;35307:37;;;;;;;;-1:-1:-1;;35403:35:0;-1:-1:-1;;;35370:18:0;;;;35359:29;;;;-1:-1:-1;;35403:35:0;;-1:-1:-1;;;35417:21:0;;;;35403:35;;;;;;;;35221:229;35464:10;35460:232;;;35507:24;;35491:13;:40;;35507:24;;;;;;;;-1:-1:-1;;35546:38:0;;;;;;;35561:23;;;;;;35546:38;;;;;-1:-1:-1;;35644:36:0;-1:-1:-1;;;35610:19:0;;;;35599:30;;-1:-1:-1;;35644:36:0;;-1:-1:-1;;;35658:22:0;;;;;;;35644:36;;;;;;;35460:232;35707:10;35706:11;:27;;;;;35722:11;35721:12;35706:27;35702:249;;;35766:24;;35750:13;:40;;35766:24;;;;;;;;-1:-1:-1;;35805:38:0;;;;;;;35820:23;;;;;;35805:38;;;;;-1:-1:-1;;35903:36:0;-1:-1:-1;;;35869:19:0;;;;35858:30;;-1:-1:-1;;35903:36:0;;-1:-1:-1;;;35917:22:0;;;;;;;35903:36;;;;;;;35702:249;36015:11;;;;;;;;;36004:8;;;;;;35973:28;;36015:11;35989:12;;;;;35973:13;:28;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;35961:9;:65;;-1:-1:-1;;35961:65:0;;-1:-1:-1;;;35961:65:0;;;;;;;;;;;;;36042:150;;;36068:13;;;;;;;;;;20757:36:1;;35961:65:0;36096:12;;;;20824:2:1;20809:18;;20802:45;36123:8:0;;;;;20863:18:1;;;20856:45;;;;36146:11:0;;;;;20932:2:1;20917:18;;20910:45;36172:9:0;;;;;;20986:3:1;20971:19;;20964:46;36042:150:0;;20744:3:1;20729:19;36042:150:0;20518:498:1;39271:1524:0;39361:4;39317:23;8559:18;;;:9;:18;;;;;;39515:9;;39317:50;;-1:-1:-1;39406:21:0;;39378:25;;39540:1;;39515:9;-1:-1:-1;;;39515:9:0;;;;;39467:31;;39485:13;39317:50;39467:31;:::i;:::-;39466:58;;;;:::i;:::-;:75;;;;:::i;:::-;39613:9;;39440:101;;-1:-1:-1;39552:24:0;;39613:9;-1:-1:-1;;;39613:9:0;;;;;39580:29;;39598:11;;;;;39580:15;:29;:::i;:::-;39579:43;;;;:::i;:::-;39552:70;-1:-1:-1;39633:20:0;39688:34;39552:70;39688:15;:34;:::i;:::-;39656:67;;:15;:67;:::i;:::-;39633:90;;39736:31;39754:12;39736:17;:31::i;:::-;39780:27;39810:41;39834:17;39810:21;:41;:::i;:::-;39943:11;;39780:71;;-1:-1:-1;39862:19:0;;39943:11;;;;;;;39932:8;;;;;;39911:17;;39932:8;;39911:13;:17;:::i;:::-;39910:30;;;;:::i;:::-;:44;;;;:::i;:::-;39884:9;;:71;;;-1:-1:-1;;;39884:9:0;;;;:71;:::i;:::-;40018:13;;39862:93;;;;;-1:-1:-1;39966:26:0;;40075:1;;39862:93;;39996:35;;40018:13;39996:19;:35;:::i;:::-;39995:64;;;;:::i;:::-;:81;;;;:::i;:::-;39966:110;-1:-1:-1;40087:25:0;40115:42;39966:110;40115:19;:42;:::i;:::-;40178:15;;40170:52;;40087:70;;-1:-1:-1;;;;;;40178:15:0;;40170:52;;;;;40087:70;;40178:15;40170:52;40178:15;40170:52;40087:70;40178:15;40170:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40239:19:0;;40235:253;;40275:50;40289:15;40306:18;40275:13;:50::i;:::-;40345:131;;;21593:25:1;;;21649:2;21634:18;;21627:34;;;21677:18;;;21670:34;;;40345:131:0;;21581:2:1;21566:18;40345:131:0;;;;;;;40235:253;40568:13;;40515:109;;-1:-1:-1;;;40515:109:0;;-1:-1:-1;;;;;40568:13:0;;;40515:109;;;17625:51:1;17692:18;;;17685:34;;;40500:12:0;;40530:4;;40515:30;;17598:18:1;;40515:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40500:124;;40639:7;40635:153;;;40663:13;;:62;;-1:-1:-1;;;40663:62:0;;;;;2936:25:1;;;-1:-1:-1;;;;;40663:13:0;;;;:44;;2909:18:1;;40663:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40745:31;40759:16;40745:31;;;;2936:25:1;;2924:2;2909:18;;2790:177;40745:31:0;;;;;;;;40635:153;39306:1489;;;;;;;;;;39271:1524::o;3233:136::-;3291:7;3318:43;3322:1;3325;3318:43;;;;;;;;;;;;;;;;;:3;:43::i;40803:472::-;40894:16;;;40908:1;40894:16;;;;;;;;40870:21;;40894:16;;;;;;;;;;-1:-1:-1;40894:16:0;40870:40;;40939:4;40921;40926:1;40921:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40921:23:0;;;:7;;;;;;;;;;:23;;;;40965:15;;:22;;;-1:-1:-1;;;40965:22:0;;;;:15;;;;;:20;;:22;;;;;40921:7;;40965:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40955:4;40960:1;40955:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40955:32:0;;;:7;;;;;;;;;:32;41030:15;;40998:62;;41015:4;;41030:15;41048:11;40998:8;:62::i;:::-;41071:15;;:196;;-1:-1:-1;;;41071:196:0;;-1:-1:-1;;;;;41071:15:0;;;;:66;;:196;;41152:11;;41071:15;;41194:4;;41221;;41241:15;;41071:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40859:416;40803:472;:::o;29897:555::-;30011:15;;29979:62;;29996:4;;-1:-1:-1;;;;;30011:15:0;30029:11;29979:8;:62::i;:::-;30080:10;30056:21;:34;30052:122;;;30107:55;;-1:-1:-1;;;30107:55:0;;23701:2:1;30107:55:0;;;23683:21:1;23740:2;23720:18;;;23713:30;23779:34;23759:18;;;23752:62;-1:-1:-1;;;23830:18:1;;;23823:43;23883:19;;30107:55:0;23499:409:1;30052:122:0;30184:15;;30388;;30184:260;;-1:-1:-1;;;30184:260:0;;30256:4;30184:260;;;24254:34:1;24304:18;;;24297:34;;;30184:15:0;24347:18:1;;;24340:34;;;24390:18;;;24383:34;-1:-1:-1;;;;;30388:15:0;;;24433:19:1;;;24426:44;30418:15:0;24486:19:1;;;24479:35;30184:15:0;;;:31;;30223:9;;24188:19:1;;30184:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;630:597:1:-;742:4;771:2;800;789:9;782:21;832:6;826:13;875:6;870:2;859:9;855:18;848:34;900:1;910:140;924:6;921:1;918:13;910:140;;;1019:14;;;1015:23;;1009:30;985:17;;;1004:2;981:26;974:66;939:10;;910:140;;;1068:6;1065:1;1062:13;1059:91;;;1138:1;1133:2;1124:6;1113:9;1109:22;1105:31;1098:42;1059:91;-1:-1:-1;1211:2:1;1190:15;-1:-1:-1;;1186:29:1;1171:45;;;;1218:2;1167:54;;630:597;-1:-1:-1;;;630:597:1:o;1232:131::-;-1:-1:-1;;;;;1307:31:1;;1297:42;;1287:70;;1353:1;1350;1343:12;1368:315;1436:6;1444;1497:2;1485:9;1476:7;1472:23;1468:32;1465:52;;;1513:1;1510;1503:12;1465:52;1552:9;1539:23;1571:31;1596:5;1571:31;:::i;:::-;1621:5;1673:2;1658:18;;;;1645:32;;-1:-1:-1;;;1368:315:1:o;1688:180::-;1747:6;1800:2;1788:9;1779:7;1775:23;1771:32;1768:52;;;1816:1;1813;1806:12;1768:52;-1:-1:-1;1839:23:1;;1688:180;-1:-1:-1;1688:180:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;3161:247::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;3328:9;3315:23;3347:31;3372:5;3347:31;:::i;3621:156::-;3687:20;;3747:4;3736:16;;3726:27;;3716:55;;3767:1;3764;3757:12;3716:55;3621:156;;;:::o;3782:393::-;3860:6;3868;3876;3884;3937:3;3925:9;3916:7;3912:23;3908:33;3905:53;;;3954:1;3951;3944:12;3905:53;3977:27;3994:9;3977:27;:::i;:::-;3967:37;;4023:36;4055:2;4044:9;4040:18;4023:36;:::i;:::-;4013:46;;4078:36;4110:2;4099:9;4095:18;4078:36;:::i;:::-;4068:46;;4133:36;4165:2;4154:9;4150:18;4133:36;:::i;:::-;4123:46;;3782:393;;;;;;;:::o;4180:118::-;4266:5;4259:13;4252:21;4245:5;4242:32;4232:60;;4288:1;4285;4278:12;4303:382;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:30;4582:32;4623:30;:::i;:::-;4672:7;4662:17;;;4303:382;;;;;:::o;4690:388::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:31;4918:5;4893:31;:::i;:::-;4943:5;-1:-1:-1;5000:2:1;4985:18;;4972:32;5013:33;4972:32;5013:33;:::i;5083:356::-;5285:2;5267:21;;;5304:18;;;5297:30;5363:34;5358:2;5343:18;;5336:62;5430:2;5415:18;;5083:356::o;5444:380::-;5523:1;5519:12;;;;5566;;;5587:61;;5641:4;5633:6;5629:17;5619:27;;5587:61;5694:2;5686:6;5683:14;5663:18;5660:38;5657:161;;5740:10;5735:3;5731:20;5728:1;5721:31;5775:4;5772:1;5765:15;5803:4;5800:1;5793:15;5657:161;;5444:380;;;:::o;6446:127::-;6507:10;6502:3;6498:20;6495:1;6488:31;6538:4;6535:1;6528:15;6562:4;6559:1;6552:15;6578:168;6618:7;6684:1;6680;6676:6;6672:14;6669:1;6666:21;6661:1;6654:9;6647:17;6643:45;6640:71;;;6691:18;;:::i;:::-;-1:-1:-1;6731:9:1;;6578:168::o;6751:127::-;6812:10;6807:3;6803:20;6800:1;6793:31;6843:4;6840:1;6833:15;6867:4;6864:1;6857:15;6883:120;6923:1;6949;6939:35;;6954:18;;:::i;:::-;-1:-1:-1;6988:9:1;;6883:120::o;8134:245::-;8201:6;8254:2;8242:9;8233:7;8229:23;8225:32;8222:52;;;8270:1;8267;8260:12;8222:52;8302:9;8296:16;8321:28;8343:5;8321:28;:::i;8384:204::-;8422:3;8458:4;8455:1;8451:12;8490:4;8487:1;8483:12;8525:3;8519:4;8515:14;8510:3;8507:23;8504:49;;;8533:18;;:::i;:::-;8569:13;;8384:204;-1:-1:-1;;;8384:204:1:o;9215:184::-;9285:6;9338:2;9326:9;9317:7;9313:23;9309:32;9306:52;;;9354:1;9351;9344:12;9306:52;-1:-1:-1;9377:16:1;;9215:184;-1:-1:-1;9215:184:1:o;9404:406::-;9606:2;9588:21;;;9645:2;9625:18;;;9618:30;9684:34;9679:2;9664:18;;9657:62;-1:-1:-1;;;9750:2:1;9735:18;;9728:40;9800:3;9785:19;;9404:406::o;13340:128::-;13380:3;13411:1;13407:6;13404:1;13401:13;13398:39;;;13417:18;;:::i;:::-;-1:-1:-1;13453:9:1;;13340:128::o;14637:401::-;14839:2;14821:21;;;14878:2;14858:18;;;14851:30;14917:34;14912:2;14897:18;;14890:62;-1:-1:-1;;;14983:2:1;14968:18;;14961:35;15028:3;15013:19;;14637:401::o;15043:399::-;15245:2;15227:21;;;15284:2;15264:18;;;15257:30;15323:34;15318:2;15303:18;;15296:62;-1:-1:-1;;;15389:2:1;15374:18;;15367:33;15432:3;15417:19;;15043:399::o;17045:125::-;17085:4;17113:1;17110;17107:8;17104:34;;;17118:18;;:::i;:::-;-1:-1:-1;17155:9:1;;17045:125::o;18406:209::-;-1:-1:-1;;18570:38:1;;;;18552:57;;18540:2;18525:18;;18406:209::o;21021:165::-;21059:1;21093:4;21090:1;21086:12;21117:3;21107:37;;21124:18;;:::i;:::-;21176:3;21169:4;21166:1;21162:12;21158:22;21153:27;;;21021:165;;;;:::o;21191:195::-;21229:4;21266;21263:1;21259:12;21298:4;21295:1;21291:12;21323:3;21318;21315:12;21312:38;;;21330:18;;:::i;:::-;21367:13;;;21191:195;-1:-1:-1;;;21191:195:1:o;22126:127::-;22187:10;22182:3;22178:20;22175:1;22168:31;22218:4;22215:1;22208:15;22242:4;22239:1;22232:15;22258:251;22328:6;22381:2;22369:9;22360:7;22356:23;22352:32;22349:52;;;22397:1;22394;22387:12;22349:52;22429:9;22423:16;22448:31;22473:5;22448:31;:::i;22514:980::-;22776:4;22824:3;22813:9;22809:19;22855:6;22844:9;22837:25;22881:2;22919:6;22914:2;22903:9;22899:18;22892:34;22962:3;22957:2;22946:9;22942:18;22935:31;22986:6;23021;23015:13;23052:6;23044;23037:22;23090:3;23079:9;23075:19;23068:26;;23129:2;23121:6;23117:15;23103:29;;23150:1;23160:195;23174:6;23171:1;23168:13;23160:195;;;23239:13;;-1:-1:-1;;;;;23235:39:1;23223:52;;23330:15;;;;23295:12;;;;23271:1;23189:9;23160:195;;;-1:-1:-1;;;;;;;23411:32:1;;;;23406:2;23391:18;;23384:60;-1:-1:-1;;;23475:3:1;23460:19;23453:35;23372:3;22514:980;-1:-1:-1;;;22514:980:1:o;24525:306::-;24613:6;24621;24629;24682:2;24670:9;24661:7;24657:23;24653:32;24650:52;;;24698:1;24695;24688:12;24650:52;24727:9;24721:16;24711:26;;24777:2;24766:9;24762:18;24756:25;24746:35;;24821:2;24810:9;24806:18;24800:25;24790:35;;24525:306;;;;;:::o

Swarm Source

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