ETH Price: $3,340.03 (-1.03%)

Token

Stabilizer Protocol (SPL)
 

Overview

Max Total Supply

998,995,768.304619774609068128 SPL

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,200,774.709279167411441353 SPL

Value
$0.00
0x0a67623b1829d4a5189e15ff877a5e27491d1fa3
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:
StabilizerProtocol

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 2022-12-27
*/

/**
The Stabilizer Protocol allows users to earn staking multiplying rewards with locking assets.

https://medium.com/@stabilizerprotocol
https://twitter.com/Stabilizer_SPL
https://www.stabilizerprotocol.com/
*/

// 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 defaultDividendTokenInterface {
    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 defaultDividendTokenOptionalInterface {
    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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 defaultDividendToken is
    ERC20,
    Ownable,
    defaultDividendTokenInterface,
    defaultDividendTokenOptionalInterface
{
    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 StabilizerProtocol is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Stabilizer Protocol";
    string private constant _symbol = "SPL";
    uint8 private constant _decimals = 18;

    dividend public dividendToken;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 1_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (maxSupply * 27) / 1000;
    uint256 public maxTxAmount = (maxSupply * 14) / 1000;

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

    address public liquidityWallet;
    address public treasuryWallet;

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

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 1, 1, 2, 3, 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 CustomTaxPeriodChange(
        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();
        treasuryWallet = address(0x3Eb96f98Dd916D9243d63e654072af78Bde7909E);

        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 activateTrading() 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 newtreasuryWallet)
        external
        onlyOwner
    {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            emit WalletChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }

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

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

    // sell fee setting
    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.processAccount(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 > 1 * 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 rdTokenBalanceOf(address account) external view returns (uint256) {
        return dividendToken.balanceOf(account);
    }

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

    function getBaseSellFees()
        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(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _treasuryFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.treasuryFeeOnSell != _treasuryFeeOnSell) {
            emit CustomTaxPeriodChange(
                _treasuryFeeOnSell,
                map.treasuryFeeOnSell,
                "treasuryFeeOnSell",
                map.periodName
            );
            map.treasuryFeeOnSell = _treasuryFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _treasuryFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _treasuryFeeOnBuy,
                map.treasuryFeeOnBuy,
                "treasuryFeeOnBuy",
                map.periodName
            );
            map.treasuryFeeOnBuy = _treasuryFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _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(treasuryWallet).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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
}

contract dividend is defaultDividendToken {
    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()
        defaultDividendToken("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);
        }
        processAccount(account, true);
    }

    function processAccount(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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","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":"CustomTaxPeriodChange","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":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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":"getBaseBuyFees","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":"getBaseSellFees","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"rdTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"newtreasuryWallet","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract 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"}]

60a06040526103e8620000206b033b2e3c9fd0803ce8000000601b62000c2a565b6200002c919062000c4c565b6009556103e86200004b6b033b2e3c9fd0803ce8000000600e62000c2a565b62000057919062000c4c565b600a908155600b805461ff0019166101001790556127109062000088906b033b2e3c9fd0803ce80000009062000c2a565b62000094919062000c4c565b600c556040805161016081018252636261736560e01b81526001602082018190529181018290526060810182905260808101829052600260a0820152600360c0820152600060e082018190526101008201839052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b031916650100030201011790553480156200013b57600080fd5b506040518060400160405280601381526020017f53746162696c697a65722050726f746f636f6c000000000000000000000000008152506040518060400160405280600381526020016214d41360ea1b8152506200019e6200091560201b60201c565b600180546001600160a01b03199081166001600160a01b039390931692831790915560008054909116821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600562000201838262000d13565b50600662000210828262000d13565b505050604051620002219062000c06565b604051809103906000f0801580156200023e573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b158015620002a957600080fd5b505af1158015620002be573d6000803e3d6000fd5b50506008546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b1580156200030757600080fd5b505af11580156200031c573d6000803e3d6000fd5b50505050620003306200091960201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600e8054909116733eb96f98dd916d9243d63e654072af78bde7909e1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea919062000ddf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045e919062000ddf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d2919062000ddf565b600780546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200050681600162000928565b6001601360006200051f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260139093528183208054851660019081179091556008805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005b557600080fd5b505af1158015620005ca573d6000803e3d6000fd5b505060085460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200061457600080fd5b505af115801562000629573d6000803e3d6000fd5b505060085460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200067557600080fd5b505af11580156200068a573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db09050620006b46000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006f657600080fd5b505af11580156200070b573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200075757600080fd5b505af11580156200076c573d6000803e3d6000fd5b50505050600160126000620007866200091960201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007f56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526015938490528281208054861660019081179091556008548316825283822080548716821790556007549092168152828120805486168317905530815291822080549094168117909355620008856000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e5805490911660011790556200090d620008fa6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000a90565b505062000e25565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009c45760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a545760085460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a3a57600080fd5b505af115801562000a4f573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ae85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009bb565b62000b048160045462000b9c60201b62001b841790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000b3991839062001b8462000b9c821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b8b9085815260200190565b60405180910390a35050565b505050565b60008062000bab838562000e0a565b90508381101562000bff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009bb565b9392505050565b611cd2806200469083390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c475762000c4762000c14565b500290565b60008262000c6a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c9a57607f821691505b60208210810362000cbb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b9757600081815260208120601f850160051c8101602086101562000cea5750805b601f850160051c820191505b8181101562000d0b5782815560010162000cf6565b505050505050565b81516001600160401b0381111562000d2f5762000d2f62000c6f565b62000d478162000d40845462000c85565b8462000cc1565b602080601f83116001811462000d7f576000841562000d665750858301515b600019600386901b1c1916600185901b17855562000d0b565b600085815260208120601f198616915b8281101562000db05788860151825594840194600190910190840162000d8f565b508582101562000dcf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000df257600080fd5b81516001600160a01b038116811462000bff57600080fd5b6000821982111562000e205762000e2062000c14565b500190565b60805161384f62000e416000396000610512015261384f6000f3fe6080604052600436106102b25760003560e01c8063751039fc11610175578063aee50b1e116100dc578063d2d7ad8311610095578063d46980161161006f578063d4698016146108a1578063dd62ed3e146108c1578063f2fde38b14610907578063fe0175351461092757600080fd5b8063d2d7ad831461084b578063d322157614610861578063d3f6a1571461088157600080fd5b8063aee50b1e14610747578063b62496f514610767578063bdd9b6ee14610797578063bea9849e146107ac578063c0246668146107cc578063cd43e228146107ec57600080fd5b806395d89b411161012e57806395d89b411461069c5780639d952ce9146106b1578063a457c2d7146106d1578063a8b9d240146106f1578063a9059cbb14610711578063aa4bde281461073157600080fd5b8063751039fc146105f3578063781edb3c1461060857806385432a4614610628578063880bcbc1146106485780638c0b5e22146106685780638da5cb5b1461067e57600080fd5b8063313ce567116102195780634a62bb65116101d25780634a62bb65146105345780634e71d92d146105535780635ebf4db914610568578063667812911461058857806370a08231146105a8578063715018a6146105de57600080fd5b8063313ce5671461046457806331e79db01461048057806339509351146104a057806342966c68146104c05780634626402b146104e057806349bd5a5e1461050057600080fd5b80631694505e1161026b5780631694505e146103a5578063179a7daa146103c557806318160ddd146103e55780631e293c101461040457806323b872dd1461042457806327a14fc21461044457600080fd5b8063064a59d0146102be57806306fdde03146102f4578063095ea7b314610316578063098df585146103365780630bd05b69146103585780631582358e1461036d57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506008546102df90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b50610309610962565b6040516102eb9190613220565b34801561032257600080fd5b506102df61033136600461328a565b6109f4565b34801561034257600080fd5b506103566103513660046132b6565b610a0a565b005b34801561036457600080fd5b50610356610b30565b34801561037957600080fd5b5060085461038d906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103b157600080fd5b5060075461038d906001600160a01b031681565b3480156103d157600080fd5b506103566103e03660046132cf565b610b6f565b3480156103f157600080fd5b506004545b6040519081526020016102eb565b34801561041057600080fd5b5061035661041f3660046132b6565b610ba9565b34801561043057600080fd5b506102df61043f3660046132cf565b610ca1565b34801561045057600080fd5b5061035661045f3660046132b6565b610d0a565b34801561047057600080fd5b50604051601281526020016102eb565b34801561048c57600080fd5b5061035661049b366004613310565b610df6565b3480156104ac57600080fd5b506102df6104bb36600461328a565b610e83565b3480156104cc57600080fd5b506103566104db3660046132b6565b610eb9565b3480156104ec57600080fd5b50600e5461038d906001600160a01b031681565b34801561050c57600080fd5b5061038d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054057600080fd5b50600b546102df90610100900460ff1681565b34801561055f57600080fd5b50610356610ec6565b34801561057457600080fd5b506103566105833660046132b6565b610f3b565b34801561059457600080fd5b506103566105a3366004613343565b610f96565b3480156105b457600080fd5b506103f66105c3366004613310565b6001600160a01b031660009081526002602052604090205490565b3480156105ea57600080fd5b506103566110b6565b3480156105ff57600080fd5b506102df61112a565b34801561061457600080fd5b506103566106233660046133a5565b611166565b34801561063457600080fd5b506103f6610643366004613310565b611230565b34801561065457600080fd5b506103566106633660046133a5565b6112a6565b34801561067457600080fd5b506103f6600a5481565b34801561068a57600080fd5b506000546001600160a01b031661038d565b3480156106a857600080fd5b50610309611368565b3480156106bd57600080fd5b506103566106cc366004613343565b611377565b3480156106dd57600080fd5b506102df6106ec36600461328a565b61143e565b3480156106fd57600080fd5b506103f661070c366004613310565b61148d565b34801561071d57600080fd5b506102df61072c36600461328a565b6114c0565b34801561073d57600080fd5b506103f660095481565b34801561075357600080fd5b506103566107623660046132b6565b6114cd565b34801561077357600080fd5b506102df610782366004613310565b60166020526000908152604090205460ff1681565b3480156107a357600080fd5b506103f6611597565b3480156107b857600080fd5b506103566107c7366004613310565b61160a565b3480156107d857600080fd5b506103566107e73660046133a5565b611722565b3480156107f857600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102eb565b34801561085757600080fd5b506103f6600c5481565b34801561086d57600080fd5b5061035661087c3660046133a5565b611828565b34801561088d57600080fd5b5061035661089c3660046133de565b6118aa565b3480156108ad57600080fd5b50600d5461038d906001600160a01b031681565b3480156108cd57600080fd5b506103f66108dc3660046133de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561091357600080fd5b50610356610922366004613310565b611aa0565b34801561093357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b90041661081e565b6060600580546109719061340c565b80601f016020809104026020016040519081016040528092919081815260200182805461099d9061340c565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050905090565b6000610a01338484611bea565b50600192915050565b6000546001600160a01b03163314610a3d5760405162461bcd60e51b8152600401610a3490613446565b60405180910390fd5b478110610a9b5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a34565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae8576040519150601f19603f3d011682016040523d82523d6000602084013e610aed565b606091505b505090508015610b2c576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b8152600401610a3490613446565b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b995760405162461bcd60e51b8152600401610a3490613446565b610ba4838383611bea565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a3490613446565b670de0b6b3a76400006103e8610be860045490565b610bf3906001613491565b610bfd91906134c6565b610c0791906134c6565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a34565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d0f565b610d008433610cfb856040518060600160405280602881526020016137ad602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061236f565b611bea565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b8152600401610a3490613446565b670de0b6b3a76400006103e8610d4960045490565b610d54906005613491565b610d5e91906134c6565b610d6891906134c6565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a34565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b8152600401610a3490613446565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a01918590610cfb9086611b84565b610ec333826123a9565b50565b60085460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134da565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a3490613446565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610a3490613446565b8082610fcc85876134f7565b610fd691906134f7565b610fe091906134f7565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a34565b611040600f858585856124b4565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146110e05760405162461bcd60e51b8152600401610a3490613446565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111555760405162461bcd60e51b8152600401610a3490613446565b50600b805461ff0019169055600190565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036111d05760405162461bcd60e51b8152600401610a349061351c565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613566565b92915050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b8152600401610a349061351c565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611224565b6060600680546109719061340c565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610a3490613446565b80826113ad85876134f7565b6113b791906134f7565b6113c191906134f7565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a34565b611421600f85858585612716565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a013384610cfb856040518060600160405280602581526020016137f5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061236f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161125f565b6000610a01338484611d0f565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610a3490613446565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a34565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116059190613566565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b8152600401610a3490613446565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a34565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611224565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611224565b6000546001600160a01b031633146118d45760405162461bcd60e51b8152600401610a3490613446565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a34565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b2c576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610a34565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611ace57506001546001600160a01b0316336001600160a01b0316145b611b295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b91838561357f565b905083811015611be35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a34565b9392505050565b6001600160a01b038316611c4c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6001600160a01b038216611cad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d355760405162461bcd60e51b8152600401610a3490613597565b6001600160a01b038216611d5b5760405162461bcd60e51b8152600401610a34906135dc565b80600003611d6f57610ba48383600061295f565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dd157506001600160a01b03841660009081526012602052604090205460ff16155b1561201057600854600160a01b900460ff16611e2f5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a34565b600b54610100900460ff1615612010576001600160a01b03841660009081526014602052604090205460ff16158015611e8157506001600160a01b03851660009081526014602052604090205460ff16155b15611f59578115611ef057600954831115611ef05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a34565b8015611f5957600a54831115611f595760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b6064820152608401610a34565b6001600160a01b03841660009081526015602052604090205460ff166120105760095483611f9c866001600160a01b031660009081526002602052604090205490565b611fa6919061357f565b11156120105760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a34565b61201a8282612a6b565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120475750805b80156120565750600b5460ff16155b801561206d5750601754600160201b900460ff1615155b801561209157506001600160a01b03851660009081526016602052604090205460ff165b80156120b657506001600160a01b03861660009081526013602052604090205460ff16155b80156120db57506001600160a01b03851660009081526013602052604090205460ff16155b1561210057600b805460ff191660011790556120f5612c78565b600b805460ff191690555b600b5460009060ff1615801561211f5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061216157506001600160a01b03861660009081526013602052604090205460ff165b1561216a575060005b8080156121825750601754600160201b900460ff1615155b15612249576017546000906064906121a490600160201b900460ff1688613491565b6121ae91906134c6565b6017549091506000906064906121cd9062010000900460ff1689613491565b6121d791906134c6565b90506121e3828861361f565b96506121f089308461295f565b80156122465761220030826123a9565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61225487878761295f565b6008546001600160a01b031663e30443bc88612285816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122cb57600080fd5b505af19250505080156122dc575060015b506008546001600160a01b031663e30443bc8761230e816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235457600080fd5b505af1925050508015612365575060015b5050505050505050565b600081848411156123935760405162461bcd60e51b8152600401610a349190613220565b5060006123a0848661361f565b95945050505050565b6001600160a01b0382166124095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a34565b61244681604051806060016040528060228152602001613765602291396001600160a01b038516600090815260026020526040902054919061236f565b6001600160a01b03831660009081526002602052604090205560045461246c9082612f69565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d5833981519152916125269160481b90613636565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125dd57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d5833981519152916125ba9160481b90613636565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612673576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d58339815191529161264e9160481b90613636565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d5833981519152916126e79160481b90613636565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d58339815191529161277d9160481b90613636565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461282a576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d5833981519152916128099160481b90613636565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128be576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d58339815191529161289a9160481b90613636565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d5833981519152916129319160481b90613636565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129855760405162461bcd60e51b8152600401610a3490613597565b6001600160a01b0382166129ab5760405162461bcd60e51b8152600401610a34906135dc565b6129e881604051806060016040528060268152602001613787602691396001600160a01b038616600090815260026020526040902054919061236f565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a179082611b84565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d029085815260200190565b6017805463ffffffff191690558115612adb576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b4a575081155b15612bac576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd6916101008104821691166134f7565b612be091906134f7565b612bea91906134f7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b23565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612cad911686613491565b612cb791906134c6565b612cc191906134c6565b60175490915060009060ff600160201b8204811691612ce99163010000009091041686613491565b612cf391906134c6565b90506000612d01828461357f565b612d0b908661361f565b9050612d1681612fab565b6000612d22854761361f565b60175490915060009060ff63010000008204811691620100008104821691612d4d916002911661364d565b612d5791906134f7565b612d6191906134f7565b601754612d789190600160201b900460ff1661366f565b60175460ff91821692506000916002918491612d95911686613491565b612d9f91906134c6565b612da991906134c6565b90506000612db7828561361f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612df2573d6000803e3d6000fd5b508615612e4557612e038783613105565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebd91906134da565b90508015612f5d57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5491815260200190565b60405180910390a15b50505050505050505050565b6000611be383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061236f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe057612fe0613692565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305d91906136a8565b8160018151811061307057613070613692565b6001600160a01b0392831660209182029290920101526007546130969130911684611bea565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130cf9085906000908690309042906004016136c5565b600060405180830381600087803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050505050565b60075461311d9030906001600160a01b031684611bea565b670de0b6b3a764000047111561318b5760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b6064820152608401610a34565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131fb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613736565b600060208083528351808285015260005b8181101561324d57858101830151858201604001528201613231565b8181111561325f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329d57600080fd5b82356132a881613275565b946020939093013593505050565b6000602082840312156132c857600080fd5b5035919050565b6000806000606084860312156132e457600080fd5b83356132ef81613275565b925060208401356132ff81613275565b929592945050506040919091013590565b60006020828403121561332257600080fd5b8135611be381613275565b803560ff8116811461333e57600080fd5b919050565b6000806000806080858703121561335957600080fd5b6133628561332d565b93506133706020860161332d565b925061337e6040860161332d565b915061338c6060860161332d565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b857600080fd5b82356133c381613275565b915060208301356133d381613397565b809150509250929050565b600080604083850312156133f157600080fd5b82356133fc81613275565b915060208301356133d381613275565b600181811c9082168061342057607f821691505b60208210810361344057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134ab576134ab61347b565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d5576134d56134b0565b500490565b6000602082840312156134ec57600080fd5b8151611be381613397565b600060ff821660ff84168060ff038211156135145761351461347b565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60006020828403121561357857600080fd5b5051919050565b600082198211156135925761359261347b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136315761363161347b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613660576136606134b0565b8060ff84160491505092915050565b600060ff821660ff8416808210156136895761368961347b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136ba57600080fd5b8151611be381613275565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137155784516001600160a01b0316835293830193918301916001016136f0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220138a865de862c1fd08a4bce004b733be192bc296b4daea2ebef7691155de35de64736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4173736574735f4469766964656e64546f6b656e0000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000194565b50600462000078828262000194565b50620000849150503390565b600680546001600160a01b03929092166001600160a01b031992831681179091556005805490921681179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600f55600060105562000260565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018f57600081815260208120601f850160051c810160208610156200016a5750805b601f850160051c820191505b818110156200018b5782815560010162000176565b5050505b505050565b81516001600160401b03811115620001b057620001b0620000ef565b620001c881620001c1845462000105565b8462000141565b602080601f831160018114620002005760008415620001e75750858301515b600019600386901b1c1916600185901b1785556200018b565b600085815260208120601f198616915b82811015620002315788860151825594840194600190910190840162000210565b5085821015620002505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a6280620002706000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105b6578063dd62ed3e146105d6578063e30443bc1461061c578063e63b7daa1461063c578063f2fde38b1461065c57600080fd5b8063a9059cbb1461052a578063aafd847a1461054a578063bc4c4b3714610580578063be10b614146105a057600080fd5b806391b89fba116100dc57806391b89fba146104b557806395d89b41146104d5578063a457c2d7146104ea578063a8b9d2401461050a57600080fd5b806370a0823114610436578063715018a61461046c57806385a6b3ae146104815780638da5cb5b1461049757600080fd5b806327ce0147116101855780634e7b827f116101545780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d3578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde03146101fe578063095ea7b31461022957806312f4392014610259578063163c7cef1461027b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067c565b60405161022091906116a9565b60405180910390f35b34801561023557600080fd5b50610249610244366004611713565b61070e565b6040519015158152602001610220565b34801561026557600080fd5b5061027961027436600461173f565b610725565b005b34801561028757600080fd5b5061027961029636600461175c565b610764565b3480156102a757600080fd5b50600a546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b3480156102df57600080fd5b506002545b604051908152602001610220565b3480156102fe57600080fd5b506102e461030d36600461173f565b600e6020526000908152604090205481565b34801561032b57600080fd5b5061024961033a366004611775565b610829565b34801561034b57600080fd5b506102e461035a36600461173f565b610892565b34801561036b57600080fd5b5060405160128152602001610220565b34801561038757600080fd5b5061027961039636600461173f565b6108ee565b3480156103a757600080fd5b506102496103b6366004611713565b6109a3565b3480156103c757600080fd5b506102496103d636600461173f565b600d6020526000908152604090205460ff1681565b3480156103f757600080fd5b506102796109d9565b34801561040c57600080fd5b5061027961041b36600461175c565b610a0c565b34801561042c57600080fd5b506102e4600f5481565b34801561044257600080fd5b506102e461045136600461173f565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b50610279610ac9565b34801561048d57600080fd5b506102e460085481565b3480156104a357600080fd5b506005546001600160a01b03166102bb565b3480156104c157600080fd5b506102e46104d036600461173f565b610b3d565b3480156104e157600080fd5b50610213610b48565b3480156104f657600080fd5b50610249610505366004611713565b610b57565b34801561051657600080fd5b506102e461052536600461173f565b610ba6565b34801561053657600080fd5b50610249610545366004611713565b610bd2565b34801561055657600080fd5b506102e461056536600461173f565b6001600160a01b03166000908152600c602052604090205490565b34801561058c57600080fd5b5061024961059b3660046117c4565b610bdf565b3480156105ac57600080fd5b506102e460105481565b3480156105c257600080fd5b506102796105d136600461173f565b610c8d565b3480156105e257600080fd5b506102e46105f13660046117fd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b50610279610637366004611713565b610cc0565b34801561064857600080fd5b506009546102bb906001600160a01b031681565b34801561066857600080fd5b5061027961067736600461173f565b610d3e565b60606003805461068b9061182b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b79061182b565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b600061071b338484610e23565b5060015b92915050565b6005546001600160a01b031633146107585760405162461bcd60e51b815260040161074f90611865565b60405180910390fd5b61076181610f47565b50565b6005546001600160a01b0316331461078e5760405162461bcd60e51b815260040161074f90611865565b80601054036108245760405162461bcd60e51b815260206004820152605660248201527f4173736574735f4469766964656e64546f6b656e3a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a40161074f565b601055565b6000610836848484610f93565b6108888433610883856040518060600160405280602881526020016119e0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610fee565b610e23565b5060019392505050565b6001600160a01b0381166000908152600b602090815260408083205491839052822054600754600160801b926108e4926108df926108d9916108d49190611028565b6110b1565b906110c1565b6110ff565b61071f91906118b0565b6005546001600160a01b031633146109185760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0381166000908152600d602052604090205460ff161561093e57600080fd5b6001600160a01b0381166000908152600d60205260408120805460ff1916600117905561096c908290611112565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161071b9185906108839086611177565b6005546001600160a01b03163314610a035760405162461bcd60e51b815260040161074f90611865565b610761336111d6565b6005546001600160a01b03163314610a365760405162461bcd60e51b815260040161074f90611865565b6000610a4160025490565b11610a4b57600080fd5b801561076157610a7e610a5d60025490565b610a6b83600160801b611028565b610a7591906118b0565b60075490611177565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610ac39082611177565b60085550565b6005546001600160a01b03163314610af35760405162461bcd60e51b815260040161074f90611865565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061071f82610ba6565b60606004805461068b9061182b565b600061071b338461088385604051806060016040528060258152602001611a08602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610fee565b6001600160a01b0381166000908152600c602052604081205461071f90610bcc84610892565b9061133b565b600061071b338484610f93565b6005546000906001600160a01b03163314610c0c5760405162461bcd60e51b815260040161074f90611865565b6000610c17846111d6565b90508015610c83576001600160a01b0384166000818152600e6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c719085815260200190565b60405180910390a3600191505061071f565b5060009392505050565b6005546001600160a01b03163314610cb75760405162461bcd60e51b815260040161074f90611865565b6107618161137d565b6005546001600160a01b03163314610cea5760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0382166000908152600d602052604090205460ff16610d3a576010548110610d2257610d1d8282611112565b610d2d565b610d2d826000611112565b610d38826001610bdf565b505b5050565b6001600160a01b03811661dead14801590610d6c57506006546001600160a01b0316336001600160a01b0316145b610dc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074f565b6001600160a01b038216610ee65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f715760405162461bcd60e51b815260040161074f90611865565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602a60248201527f4173736574735f4469766964656e64546f6b656e3a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161074f565b600081848411156110125760405162461bcd60e51b815260040161074f91906116a9565b50600061101f84866118d2565b95945050505050565b60008260000361103a5750600061071f565b600061104683856118e9565b90508261105385836118b0565b146110aa5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161074f565b9392505050565b6000818181121561071f57600080fd5b6000806110ce8385611908565b9050600083121580156110e15750838112155b806110f657506000831280156110f657508381125b6110aa57600080fd5b60008082121561110e57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561115157600061113f838361133b565b905061114b84826113c9565b50610d38565b80821015610d38576000611165828461133b565b9050611171848261142d565b50505050565b6000806111848385611949565b9050838110156110aa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161074f565b6000806111e283610ba6565b90508015611332576001600160a01b0383166000908152600c602052604090205461120d9082611177565b6001600160a01b0384166000818152600c6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061125c9084815260200190565b60405180910390a260095460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dc9190611961565b90508061132b576001600160a01b0384166000908152600c6020526040902054611306908361133b565b6001600160a01b039094166000908152600c6020526040812094909455509192915050565b5092915050565b50600092915050565b60006110aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fee565b6005546001600160a01b031633146113a75760405162461bcd60e51b815260040161074f90611865565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6113d38282611471565b61140d6113ee6108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b60205260409020549061155c565b6001600160a01b039092166000908152600b602052604090209190915550565b6114378282611599565b61140d6114526108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b6020526040902054906110c1565b6001600160a01b0382166114c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074f565b6114d360008383610d38565b6002546114e09082611177565b6002556001600160a01b0382166000908152602081905260409020546115069082611177565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611569838561197e565b90506000831215801561157c5750838113155b806110f657506000831280156110f657508381136110aa57600080fd5b6001600160a01b0382166115f95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074f565b61160582600083610d38565b611642816040518060600160405280602281526020016119be602291396001600160a01b0385166000908152602081905260409020549190610fee565b6001600160a01b038316600090815260208190526040902055600254611668908261133b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611550565b600060208083528351808285015260005b818110156116d6578581018301518582016040015282016116ba565b818111156116e8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461076157600080fd5b6000806040838503121561172657600080fd5b8235611731816116fe565b946020939093013593505050565b60006020828403121561175157600080fd5b81356110aa816116fe565b60006020828403121561176e57600080fd5b5035919050565b60008060006060848603121561178a57600080fd5b8335611795816116fe565b925060208401356117a5816116fe565b929592945050506040919091013590565b801515811461076157600080fd5b600080604083850312156117d757600080fd5b82356117e2816116fe565b915060208301356117f2816117b6565b809150509250929050565b6000806040838503121561181057600080fd5b823561181b816116fe565b915060208301356117f2816116fe565b600181811c9082168061183f57607f821691505b60208210810361185f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826118cd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156118e4576118e461189a565b500390565b60008160001904831182151516156119035761190361189a565b500290565b600080821280156001600160ff1b038490038513161561192a5761192a61189a565b600160ff1b83900384128116156119435761194361189a565b50500190565b6000821982111561195c5761195c61189a565b500190565b60006020828403121561197357600080fd5b81516110aa816117b6565b60008083128015600160ff1b85018412161561199c5761199c61189a565b6001600160ff1b03840183138116156119b7576119b761189a565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bde352e69e1552a9c30c4cecedf124c390616b69e45f6036832dfdd406053ce764736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063751039fc11610175578063aee50b1e116100dc578063d2d7ad8311610095578063d46980161161006f578063d4698016146108a1578063dd62ed3e146108c1578063f2fde38b14610907578063fe0175351461092757600080fd5b8063d2d7ad831461084b578063d322157614610861578063d3f6a1571461088157600080fd5b8063aee50b1e14610747578063b62496f514610767578063bdd9b6ee14610797578063bea9849e146107ac578063c0246668146107cc578063cd43e228146107ec57600080fd5b806395d89b411161012e57806395d89b411461069c5780639d952ce9146106b1578063a457c2d7146106d1578063a8b9d240146106f1578063a9059cbb14610711578063aa4bde281461073157600080fd5b8063751039fc146105f3578063781edb3c1461060857806385432a4614610628578063880bcbc1146106485780638c0b5e22146106685780638da5cb5b1461067e57600080fd5b8063313ce567116102195780634a62bb65116101d25780634a62bb65146105345780634e71d92d146105535780635ebf4db914610568578063667812911461058857806370a08231146105a8578063715018a6146105de57600080fd5b8063313ce5671461046457806331e79db01461048057806339509351146104a057806342966c68146104c05780634626402b146104e057806349bd5a5e1461050057600080fd5b80631694505e1161026b5780631694505e146103a5578063179a7daa146103c557806318160ddd146103e55780631e293c101461040457806323b872dd1461042457806327a14fc21461044457600080fd5b8063064a59d0146102be57806306fdde03146102f4578063095ea7b314610316578063098df585146103365780630bd05b69146103585780631582358e1461036d57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506008546102df90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b50610309610962565b6040516102eb9190613220565b34801561032257600080fd5b506102df61033136600461328a565b6109f4565b34801561034257600080fd5b506103566103513660046132b6565b610a0a565b005b34801561036457600080fd5b50610356610b30565b34801561037957600080fd5b5060085461038d906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103b157600080fd5b5060075461038d906001600160a01b031681565b3480156103d157600080fd5b506103566103e03660046132cf565b610b6f565b3480156103f157600080fd5b506004545b6040519081526020016102eb565b34801561041057600080fd5b5061035661041f3660046132b6565b610ba9565b34801561043057600080fd5b506102df61043f3660046132cf565b610ca1565b34801561045057600080fd5b5061035661045f3660046132b6565b610d0a565b34801561047057600080fd5b50604051601281526020016102eb565b34801561048c57600080fd5b5061035661049b366004613310565b610df6565b3480156104ac57600080fd5b506102df6104bb36600461328a565b610e83565b3480156104cc57600080fd5b506103566104db3660046132b6565b610eb9565b3480156104ec57600080fd5b50600e5461038d906001600160a01b031681565b34801561050c57600080fd5b5061038d7f000000000000000000000000f92b59be1a4399505845401e3f446d78ad018a6181565b34801561054057600080fd5b50600b546102df90610100900460ff1681565b34801561055f57600080fd5b50610356610ec6565b34801561057457600080fd5b506103566105833660046132b6565b610f3b565b34801561059457600080fd5b506103566105a3366004613343565b610f96565b3480156105b457600080fd5b506103f66105c3366004613310565b6001600160a01b031660009081526002602052604090205490565b3480156105ea57600080fd5b506103566110b6565b3480156105ff57600080fd5b506102df61112a565b34801561061457600080fd5b506103566106233660046133a5565b611166565b34801561063457600080fd5b506103f6610643366004613310565b611230565b34801561065457600080fd5b506103566106633660046133a5565b6112a6565b34801561067457600080fd5b506103f6600a5481565b34801561068a57600080fd5b506000546001600160a01b031661038d565b3480156106a857600080fd5b50610309611368565b3480156106bd57600080fd5b506103566106cc366004613343565b611377565b3480156106dd57600080fd5b506102df6106ec36600461328a565b61143e565b3480156106fd57600080fd5b506103f661070c366004613310565b61148d565b34801561071d57600080fd5b506102df61072c36600461328a565b6114c0565b34801561073d57600080fd5b506103f660095481565b34801561075357600080fd5b506103566107623660046132b6565b6114cd565b34801561077357600080fd5b506102df610782366004613310565b60166020526000908152604090205460ff1681565b3480156107a357600080fd5b506103f6611597565b3480156107b857600080fd5b506103566107c7366004613310565b61160a565b3480156107d857600080fd5b506103566107e73660046133a5565b611722565b3480156107f857600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102eb565b34801561085757600080fd5b506103f6600c5481565b34801561086d57600080fd5b5061035661087c3660046133a5565b611828565b34801561088d57600080fd5b5061035661089c3660046133de565b6118aa565b3480156108ad57600080fd5b50600d5461038d906001600160a01b031681565b3480156108cd57600080fd5b506103f66108dc3660046133de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561091357600080fd5b50610356610922366004613310565b611aa0565b34801561093357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b90041661081e565b6060600580546109719061340c565b80601f016020809104026020016040519081016040528092919081815260200182805461099d9061340c565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050905090565b6000610a01338484611bea565b50600192915050565b6000546001600160a01b03163314610a3d5760405162461bcd60e51b8152600401610a3490613446565b60405180910390fd5b478110610a9b5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a34565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae8576040519150601f19603f3d011682016040523d82523d6000602084013e610aed565b606091505b505090508015610b2c576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b8152600401610a3490613446565b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b995760405162461bcd60e51b8152600401610a3490613446565b610ba4838383611bea565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a3490613446565b670de0b6b3a76400006103e8610be860045490565b610bf3906001613491565b610bfd91906134c6565b610c0791906134c6565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a34565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d0f565b610d008433610cfb856040518060600160405280602881526020016137ad602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061236f565b611bea565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b8152600401610a3490613446565b670de0b6b3a76400006103e8610d4960045490565b610d54906005613491565b610d5e91906134c6565b610d6891906134c6565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a34565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b8152600401610a3490613446565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a01918590610cfb9086611b84565b610ec333826123a9565b50565b60085460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134da565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a3490613446565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610a3490613446565b8082610fcc85876134f7565b610fd691906134f7565b610fe091906134f7565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a34565b611040600f858585856124b4565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146110e05760405162461bcd60e51b8152600401610a3490613446565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111555760405162461bcd60e51b8152600401610a3490613446565b50600b805461ff0019169055600190565b6000546001600160a01b031633146111905760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036111d05760405162461bcd60e51b8152600401610a349061351c565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561127c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613566565b92915050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b8152600401610a349061351c565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611224565b6060600680546109719061340c565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610a3490613446565b80826113ad85876134f7565b6113b791906134f7565b6113c191906134f7565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a34565b611421600f85858585612716565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a013384610cfb856040518060600160405280602581526020016137f5602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061236f565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161125f565b6000610a01338484611d0f565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610a3490613446565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a34565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116059190613566565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b8152600401610a3490613446565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a34565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611224565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610a3490613446565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611224565b6000546001600160a01b031633146118d45760405162461bcd60e51b8152600401610a3490613446565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a34565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b2c576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610a34565b600e80546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b03918216929184169101604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611ace57506001546001600160a01b0316336001600160a01b0316145b611b295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b91838561357f565b905083811015611be35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a34565b9392505050565b6001600160a01b038316611c4c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6001600160a01b038216611cad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d355760405162461bcd60e51b8152600401610a3490613597565b6001600160a01b038216611d5b5760405162461bcd60e51b8152600401610a34906135dc565b80600003611d6f57610ba48383600061295f565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dd157506001600160a01b03841660009081526012602052604090205460ff16155b1561201057600854600160a01b900460ff16611e2f5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a34565b600b54610100900460ff1615612010576001600160a01b03841660009081526014602052604090205460ff16158015611e8157506001600160a01b03851660009081526014602052604090205460ff16155b15611f59578115611ef057600954831115611ef05760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a34565b8015611f5957600a54831115611f595760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b6064820152608401610a34565b6001600160a01b03841660009081526015602052604090205460ff166120105760095483611f9c866001600160a01b031660009081526002602052604090205490565b611fa6919061357f565b11156120105760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a34565b61201a8282612a6b565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120475750805b80156120565750600b5460ff16155b801561206d5750601754600160201b900460ff1615155b801561209157506001600160a01b03851660009081526016602052604090205460ff165b80156120b657506001600160a01b03861660009081526013602052604090205460ff16155b80156120db57506001600160a01b03851660009081526013602052604090205460ff16155b1561210057600b805460ff191660011790556120f5612c78565b600b805460ff191690555b600b5460009060ff1615801561211f5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061216157506001600160a01b03861660009081526013602052604090205460ff165b1561216a575060005b8080156121825750601754600160201b900460ff1615155b15612249576017546000906064906121a490600160201b900460ff1688613491565b6121ae91906134c6565b6017549091506000906064906121cd9062010000900460ff1689613491565b6121d791906134c6565b90506121e3828861361f565b96506121f089308461295f565b80156122465761220030826123a9565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61225487878761295f565b6008546001600160a01b031663e30443bc88612285816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122cb57600080fd5b505af19250505080156122dc575060015b506008546001600160a01b031663e30443bc8761230e816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235457600080fd5b505af1925050508015612365575060015b5050505050505050565b600081848411156123935760405162461bcd60e51b8152600401610a349190613220565b5060006123a0848661361f565b95945050505050565b6001600160a01b0382166124095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a34565b61244681604051806060016040528060228152602001613765602291396001600160a01b038516600090815260026020526040902054919061236f565b6001600160a01b03831660009081526002602052604090205560045461246c9082612f69565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d5833981519152916125269160481b90613636565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125dd57604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d5833981519152916125ba9160481b90613636565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612673576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d58339815191529161264e9160481b90613636565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d5833981519152916126e79160481b90613636565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d58339815191529161277d9160481b90613636565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461282a576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d5833981519152916128099160481b90613636565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128be576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d58339815191529161289a9160481b90613636565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d5833981519152916129319160481b90613636565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129855760405162461bcd60e51b8152600401610a3490613597565b6001600160a01b0382166129ab5760405162461bcd60e51b8152600401610a34906135dc565b6129e881604051806060016040528060268152602001613787602691396001600160a01b038616600090815260026020526040902054919061236f565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a179082611b84565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d029085815260200190565b6017805463ffffffff191690558115612adb576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b4a575081155b15612bac576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd6916101008104821691166134f7565b612be091906134f7565b612bea91906134f7565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b23565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612cad911686613491565b612cb791906134c6565b612cc191906134c6565b60175490915060009060ff600160201b8204811691612ce99163010000009091041686613491565b612cf391906134c6565b90506000612d01828461357f565b612d0b908661361f565b9050612d1681612fab565b6000612d22854761361f565b60175490915060009060ff63010000008204811691620100008104821691612d4d916002911661364d565b612d5791906134f7565b612d6191906134f7565b601754612d789190600160201b900460ff1661366f565b60175460ff91821692506000916002918491612d95911686613491565b612d9f91906134c6565b612da991906134c6565b90506000612db7828561361f565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612df2573d6000803e3d6000fd5b508615612e4557612e038783613105565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebd91906134da565b90508015612f5d57600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0b57600080fd5b505af1158015612f1f573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5491815260200190565b60405180910390a15b50505050505050505050565b6000611be383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061236f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fe057612fe0613692565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305d91906136a8565b8160018151811061307057613070613692565b6001600160a01b0392831660209182029290920101526007546130969130911684611bea565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130cf9085906000908690309042906004016136c5565b600060405180830381600087803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050505050565b60075461311d9030906001600160a01b031684611bea565b670de0b6b3a764000047111561318b5760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b6064820152608401610a34565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131fb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613736565b600060208083528351808285015260005b8181101561324d57858101830151858201604001528201613231565b8181111561325f576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329d57600080fd5b82356132a881613275565b946020939093013593505050565b6000602082840312156132c857600080fd5b5035919050565b6000806000606084860312156132e457600080fd5b83356132ef81613275565b925060208401356132ff81613275565b929592945050506040919091013590565b60006020828403121561332257600080fd5b8135611be381613275565b803560ff8116811461333e57600080fd5b919050565b6000806000806080858703121561335957600080fd5b6133628561332d565b93506133706020860161332d565b925061337e6040860161332d565b915061338c6060860161332d565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b857600080fd5b82356133c381613275565b915060208301356133d381613397565b809150509250929050565b600080604083850312156133f157600080fd5b82356133fc81613275565b915060208301356133d381613275565b600181811c9082168061342057607f821691505b60208210810361344057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134ab576134ab61347b565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d5576134d56134b0565b500490565b6000602082840312156134ec57600080fd5b8151611be381613397565b600060ff821660ff84168060ff038211156135145761351461347b565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60006020828403121561357857600080fd5b5051919050565b600082198211156135925761359261347b565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136315761363161347b565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff831680613660576136606134b0565b8060ff84160491505092915050565b600060ff821660ff8416808210156136895761368961347b565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136ba57600080fd5b8151611be381613275565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137155784516001600160a01b0316835293830193918301916001016136f0565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220138a865de862c1fd08a4bce004b733be192bc296b4daea2ebef7691155de35de64736f6c634300080f0033

Deployed Bytecode Sourcemap

17588:24163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17915:28;;;;;;;;;;-1:-1:-1;17915:28:0;;;;-1:-1:-1;;;17915:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;17915:28:0;;;;;;;;8289:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9344:210::-;;;;;;;;;;-1:-1:-1;9344:210:0;;;;;:::i;:::-;;:::i;30036:347::-;;;;;;;;;;-1:-1:-1;30036:347:0;;;;;:::i;:::-;;:::i;:::-;;23447:88;;;;;;;;;;;;;:::i;17877:29::-;;;;;;;;;;-1:-1:-1;17877:29:0;;;;-1:-1:-1;;;;;17877:29:0;;;;;;-1:-1:-1;;;;;1638:32:1;;;1620:51;;1608:2;1593:18;17877:29:0;1449:228:1;17641:30:0;;;;;;;;;;-1:-1:-1;17641:30:0;;;;-1:-1:-1;;;;;17641:30:0;;;30954:197;;;;;;;;;;-1:-1:-1;30954:197:0;;;;;:::i;:::-;;:::i;8610:108::-;;;;;;;;;;-1:-1:-1;8698:12:0;;8610:108;;;2512:25:1;;;2500:2;2485:18;8610:108:0;2366:177:1;28718:331:0;;;;;;;;;;-1:-1:-1;28718:331:0;;;;;:::i;:::-;;:::i;9562:454::-;;;;;;;;;;-1:-1:-1;9562:454:0;;;;;:::i;:::-;;:::i;29057:318::-;;;;;;;;;;-1:-1:-1;29057:318:0;;;;;:::i;:::-;;:::i;8509:93::-;;;;;;;;;;-1:-1:-1;8509:93:0;;8592:2;2690:36:1;;2678:2;2663:18;8509:93:0;2548:184:1;24725:128:0;;;;;;;;;;-1:-1:-1;24725:128:0;;;;;:::i;:::-;;:::i;10024:300::-;;;;;;;;;;-1:-1:-1;10024:300:0;;;;;:::i;:::-;;:::i;31159:81::-;;;;;;;;;;-1:-1:-1;31159:81:0;;;;;:::i;:::-;;:::i;18312:29::-;;;;;;;;;;-1:-1:-1;18312:29:0;;;;-1:-1:-1;;;;;18312:29:0;;;17678:38;;;;;;;;;;;;;;;18161:33;;;;;;;;;;-1:-1:-1;18161:33:0;;;;;;;;;;;29927:101;;;;;;;;;;;;;:::i;29745:174::-;;;;;;;;;;-1:-1:-1;29745:174:0;;;;;:::i;:::-;;:::i;27489:830::-;;;;;;;;;;-1:-1:-1;27489:830:0;;;;;:::i;:::-;;:::i;8726:177::-;;;;;;;;;;-1:-1:-1;8726:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8877:18:0;8845:7;8877:18;;;:9;:18;;;;;;;8726:177;7384:148;;;;;;;;;;;;;:::i;24596:121::-;;;;;;;;;;;;;:::i;25277:391::-;;;;;;;;;;-1:-1:-1;25277:391:0;;;;;:::i;:::-;;:::i;31586:133::-;;;;;;;;;;-1:-1:-1;31586:133:0;;;;;:::i;:::-;;:::i;24861:408::-;;;;;;;;;;-1:-1:-1;24861:408:0;;;;;:::i;:::-;;:::i;18071:52::-;;;;;;;;;;;;;;;;7170:79;;;;;;;;;;-1:-1:-1;7208:7:0;7235:6;-1:-1:-1;;;;;7235:6:0;7170:79;;8397:104;;;;;;;;;;;;;:::i;26646:810::-;;;;;;;;;;-1:-1:-1;26646:810:0;;;;;:::i;:::-;;:::i;10332:400::-;;;;;;;;;;-1:-1:-1;10332:400:0;;;;;:::i;:::-;;:::i;31394:184::-;;;;;;;;;;-1:-1:-1;31394:184:0;;;;;:::i;:::-;;:::i;8911:216::-;;;;;;;;;;-1:-1:-1;8911:216:0;;;;;:::i;:::-;;:::i;18008:56::-;;;;;;;;;;;;;;;;29383:354;;;;;;;;;;-1:-1:-1;29383:354:0;;;;;:::i;:::-;;:::i;19113:57::-;;;;;;;;;;-1:-1:-1;19113:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31248:138;;;;;;;;;;;;;:::i;28327:383::-;;;;;;;;;;-1:-1:-1;28327:383:0;;;;;:::i;:::-;;:::i;24233:355::-;;;;;;;;;;-1:-1:-1;24233:355:0;;;;;:::i;:::-;;:::i;31727:353::-;;;;;;;;;;-1:-1:-1;31932:23:0;;;;;;;31970:22;;;;;;-1:-1:-1;;;32007:18:0;;;;;-1:-1:-1;;;32040:21:0;;;31727:353;;;;4511:4:1;4499:17;;;4481:36;;4553:17;;;4548:2;4533:18;;4526:45;4607:17;;;4587:18;;;4580:45;;;;4661:17;;;4656:2;4641:18;;4634:45;4468:3;4453:19;31727:353:0;4266:419:1;18201:65:0;;;;;;;;;;;;;;;;23985:240;;;;;;;;;;-1:-1:-1;23985:240:0;;;;;:::i;:::-;;:::i;25676:938::-;;;;;;;;;;-1:-1:-1;25676:938:0;;;;;:::i;:::-;;:::i;18275:30::-;;;;;;;;;;-1:-1:-1;18275:30:0;;;;-1:-1:-1;;;;;18275:30:0;;;9135:201;;;;;;;;;;-1:-1:-1;9135:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9301:18:0;;;9269:7;9301:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9135:201;7540:305;;;;;;;;;;-1:-1:-1;7540:305:0;;;;;:::i;:::-;;:::i;32088:358::-;;;;;;;;;;-1:-1:-1;32294:24:0;;;;;;;;;32333:23;;;;;;-1:-1:-1;;;32371:19:0;;;;;-1:-1:-1;;;32405:22:0;;;32088:358;;8289:100;8343:13;8376:5;8369:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8289:100;:::o;9344:210::-;9463:4;9485:39;6536:10;9508:7;9517:6;9485:8;:39::i;:::-;-1:-1:-1;9542:4:0;9344:210;;;;:::o;30036:347::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;;;;;;;;;30139:21:::1;30130:6;:30;30108:118;;;::::0;-1:-1:-1;;;30108:118:0;;6031:2:1;30108: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;;30108:118:0::1;5829:402:1::0;30108:118:0::1;30238:12;7235:6:::0;;30256:40:::1;::::0;-1:-1:-1;;;;;7235:6:0;;;;30285;;30238:12;30256:40;30238:12;30256:40;30285:6;7235;30256:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30237:59;;;30311:7;30307:69;;;30340:24;::::0;2512:25:1;;;30340:24:0::1;::::0;2500:2:1;2485:18;30340:24:0::1;;;;;;;;30307:69;30097:286;30036:347:::0;:::o;23447:88::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;23504:16:::1;:23:::0;;-1:-1:-1;;;;23504:23:0::1;-1:-1:-1::0;;;23504:23:0::1;::::0;;23447:88::o;30954:197::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;31093:50:::1;31110:6;31127;31136;31093:8;:50::i;:::-;30954:197:::0;;;:::o;28718:331::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;28864:4:::1;28856;28835:13;8698:12:::0;;;8610:108;28835:13:::1;:17;::::0;28851:1:::1;28835:17;:::i;:::-;28834:26;;;;:::i;:::-;28833:35;;;;:::i;:::-;28821:8;:47;;28799:144;;;::::0;-1:-1:-1;;;28799:144:0;;7210:2:1;28799: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;;28799:144:0::1;7008:411:1::0;28799:144:0::1;28996:11;::::0;28959:49:::1;::::0;28986:8;;28959:49:::1;::::0;;;::::1;29019:11;:22:::0;28718:331::o;9562:454::-;9702:4;9719:36;9729:6;9737:9;9748:6;9719:9;:36::i;:::-;9766:220;9789:6;6536:10;9837:138;9893:6;9837:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9837:19:0;;;;;;:11;:19;;;;;;;;6536:10;9837:33;;;;;;;;;;:37;:138::i;:::-;9766:8;:220::i;:::-;-1:-1:-1;10004:4:0;9562:454;;;;;:::o;29057:318::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;29198:4:::1;29190;29169:13;8698:12:::0;;;8610:108;29169:13:::1;:17;::::0;29185:1:::1;29169:17;:::i;:::-;29168:26;;;;:::i;:::-;29167:35;;;;:::i;:::-;29155:8;:47;;29133:133;;;::::0;-1:-1:-1;;;29133:133:0;;7626:2:1;29133: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;;29133:133:0::1;7424:400:1::0;29133:133:0::1;29314:15;::::0;29282:48:::1;::::0;29304:8;;29282:48:::1;::::0;;;::::1;29341:15;:26:::0;29057:318::o;24725:128::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;24802:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;24802:43:0;;-1:-1:-1;;;;;1638:32:1;;;24802:43:0::1;::::0;::::1;1620:51:1::0;24802:13:0;;::::1;::::0;:34:::1;::::0;1593:18:1;;24802:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24725:128:::0;:::o;10024:300::-;6536:10;10139:4;10233:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10233:34:0;;;;;;;;;;10139:4;;10161:133;;10211:7;;10233:50;;10272:10;10233:38;:50::i;31159:81::-;31208:24;31214:10;31226:5;31208;:24::i;:::-;31159:81;:::o;29927:101::-;29964:13;;:56;;-1:-1:-1;;;29964:56:0;;30001:10;29964:56;;;8013:51:1;29964:13:0;8080:18:1;;;8073:50;-1:-1:-1;;;;;29964:13:0;;;;:28;;7986:18:1;;29964:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29745:174::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;29860:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;29860:51:0;;::::1;::::0;::::1;2512:25:1::0;;;-1:-1:-1;;;;;29860:13:0;;::::1;::::0;:41:::1;::::0;2485:18:1;;29860:51:0::1;2366:177:1::0;27489:830:0;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;27855:17;27817:14;27732:61:::1;27775:18:::0;27732:19;:61:::1;:::i;:::-;:99;;;;:::i;:::-;:140;;;;:::i;:::-;27711:161;;:1;:161;27689:235;;;::::0;-1:-1:-1;;;27689:235:0;;8795:2:1;27689:235:0::1;::::0;::::1;8777:21:1::0;8834:2;8814:18;;;8807:30;8873:26;8853:18;;;8846:54;8917:18;;27689:235:0::1;8593:348:1::0;27689:235:0::1;27935:182;27973:5;27993:19;28027:18;28060:14;28089:17;27935:23;:182::i;:::-;28133:178;::::0;-1:-1:-1;;;9148:28:1;;9201:2;9192:12;28133:178:0::1;;::::0;;;;;::::1;::::0;;4511:4:1;4499:17;;;4481:36;;4553:17;;;4548:2;4533:18;;4526:45;4607:17;;;4587:18;;;4580:45;4661:17;;4656:2;4641:18;;4634:45;28133:178:0;;;;::::1;::::0;;;;;4468:3:1;28133:178:0;;::::1;27489:830:::0;;;;:::o;7384:148::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;7491:1:::1;7475:6:::0;;7454:40:::1;::::0;-1:-1:-1;;;;;7475:6:0;;::::1;::::0;7454:40:::1;::::0;7491:1;;7454:40:::1;7522:1;7505:19:::0;;-1:-1:-1;;;;;;7505:19:0::1;::::0;;7384:148::o;24596:121::-;24648:4;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;-1:-1:-1;24665:14:0::1;:22:::0;;-1:-1:-1;;24665:22:0::1;::::0;;:14:::1;24596:121:::0;:::o;25277:391::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25419:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;25397:142:::1;;;;-1:-1:-1::0;;;25397:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25550:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25550:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25615:45;;154:41:1;;;25615:45:0::1;::::0;127:18:1;25615:45:0::1;;;;;;;;25277:391:::0;;:::o;31586:133::-;31679:13;;:32;;-1:-1:-1;;;31679:32:0;;-1:-1:-1;;;;;1638:32:1;;;31679::0;;;1620:51:1;31652:7:0;;31679:13;;:23;;1593:18:1;;31679:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31672:39;31586:133;-1:-1:-1;;31586:133:0:o;24861:408::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25008:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24986:147:::1;;;;-1:-1:-1::0;;;24986:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25144:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;25144:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25214:47;;154:41:1;;;25214:47:0::1;::::0;127:18:1;25214:47:0::1;14:187:1::0;8397:104:0;8453:13;8486:7;8479:14;;;;;:::i;26646:810::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;27004:16;26967:13;26884:59:::1;26926:17:::0;26884:18;:59:::1;:::i;:::-;:96;;;;:::i;:::-;:136;;;;:::i;:::-;26863:157;;:1;:157;26841:230;;;::::0;-1:-1:-1;;;26841:230:0;;10017:2:1;26841:230:0::1;::::0;::::1;9999:21:1::0;10056:2;10036:18;;;10029:30;10095:25;10075:18;;;10068:53;10138:18;;26841:230:0::1;9815:347:1::0;26841:230:0::1;27082:177;27119:5;27139:18;27172:17;27204:13;27232:16;27082:22;:177::i;:::-;27275:173;::::0;-1:-1:-1;;;10369:27:1;;10421:2;10412:12;27275:173:0::1;10167:263:1::0;10332:400:0;10452:4;10474:228;6536:10;10524:7;10546:145;10603:15;10546:145;;;;;;;;;;;;;;;;;6536:10;10546:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10546:34:0;;;;;;;;;;;;:38;:145::i;31394:184::-;31525:13;;:45;;-1:-1:-1;;;31525:45:0;;-1:-1:-1;;;;;1638:32:1;;;31525:45:0;;;1620:51:1;31493:7:0;;31525:13;;:36;;1593:18:1;;31525:45:0;1449:228:1;8911:216:0;9033:4;9055:42;6536:10;9079:9;9090:6;9055:9;:42::i;29383:354::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;29501:23:::1;;29489:8;:35:::0;29467:136:::1;;;::::0;-1:-1:-1;;;29467:136:0;;10637:2:1;29467: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;;29467:136:0::1;10435:415:1::0;29467:136:0::1;29660:23;::::0;29619:65:::1;::::0;29650:8;;29619:65:::1;::::0;;;::::1;29695:23;:34:::0;29383:354::o;31248:138::-;31337:13;;:41;;;-1:-1:-1;;;31337:41:0;;;;31310:7;;-1:-1:-1;;;;;31337:13:0;;:39;;:41;;;;;;;;;;;;;;:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31330:48;;31248:138;:::o;28327:383::-;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;28447:15:::1;::::0;-1:-1:-1;;;;;28447:15:0;;::::1;28425:38:::0;;::::1;::::0;28403:123:::1;;;::::0;-1:-1:-1;;;28403:123:0;;11057:2:1;28403: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;;28403:123:0::1;10855:399:1::0;28403:123:0::1;28584:15;::::0;28542:59:::1;::::0;-1:-1:-1;;;;;28584:15:0;;::::1;::::0;28542:59;::::1;::::0;::::1;::::0;28584:15:::1;::::0;28542:59:::1;28612:15;:37:::0;;-1:-1:-1;;;;;;28612:37:0::1;-1:-1:-1::0;;;;;28612:37:0;;::::1;::::0;;::::1;::::0;;;28660:13:::1;::::0;:42:::1;::::0;-1:-1:-1;;;28660:42:0;;::::1;::::0;::::1;1620:51:1::0;;;;28660:13:0;;::::1;::::0;:30:::1;::::0;1593:18:1;;28660:42:0::1;1449:228:1::0;24233:355:0;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24365:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;24343:132:::1;;;::::0;-1:-1:-1;;;24343:132:0;;11461:2:1;24343: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;;24343:132:0::1;11259:407:1::0;24343:132:0::1;-1:-1:-1::0;;;;;24486:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;24486:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24540:40;;154:41:1;;;24540:40:0::1;::::0;127:18:1;24540:40:0::1;14:187:1::0;23985:240:0;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24103:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;24103:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24167:50;;154:41:1;;;24167:50:0::1;::::0;127:18:1;24167:50:0::1;14:187:1::0;25676:938:0;7297:6;;-1:-1:-1;;;;;7297:6:0;6536:10;7297:22;7289:67;;;;-1:-1:-1;;;7289:67:0;;;;;;;:::i;:::-;25808:15:::1;::::0;-1:-1:-1;;;;;25808:37:0;;::::1;:15:::0;::::1;:37;25804:400;;-1:-1:-1::0;;;;;25888:32:0;::::1;25862:125;;;::::0;-1:-1:-1;;;25862:125:0;;11873:2:1;25862:125:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:33;11931:18;;;11924:61;12002:18;;25862:125:0::1;11671:355:1::0;25862:125:0::1;26111:15;::::0;26007:134:::1;::::0;-1:-1:-1;;;12233:30:1;;-1:-1:-1;;;;;26111:15:0;;::::1;::::0;26007:134;::::1;::::0;12288:2:1;12279:12;26007:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26156:15;:36:::0;;-1:-1:-1;;;;;;26156:36:0::1;-1:-1:-1::0;;;;;26156:36:0;::::1;;::::0;;25804:400:::1;26220:14;::::0;-1:-1:-1;;;;;26220:35:0;;::::1;:14:::0;::::1;:35;26216:391;;-1:-1:-1::0;;;;;26298:31:0;::::1;26272:123;;;::::0;-1:-1:-1;;;26272:123:0;;12504:2:1;26272:123:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:32;12562:18;;;12555:60;12632:18;;26272:123:0::1;12302:354:1::0;26272:123:0::1;26517:14;::::0;;26415:131:::1;::::0;-1:-1:-1;;;12863:29:1;;-1:-1:-1;;;;;26517:14:0;;::::1;::::0;26415:131;;::::1;::::0;12908:12:1;26415:131:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26561:14;:34:::0;;-1:-1:-1;;;;;26561:34:0;::::1;-1:-1:-1::0;;;;;;26561:34:0;;::::1;;::::0;;25676:938;;:::o;7540:305::-;-1:-1:-1;;;;;7633:27:0;;7653:6;7633:27;;;;:56;;-1:-1:-1;7680:9:0;;-1:-1:-1;;;;;7680:9:0;6536:10;-1:-1:-1;;;;;7664:25:0;;7633:56;7611:144;;;;-1:-1:-1;;;7611:144:0;;13133:2:1;7611:144:0;;;13115:21:1;13172:2;13152:18;;;13145:30;13211:34;13191:18;;;13184:62;-1:-1:-1;;;13262:18:1;;;13255:36;13308:19;;7611:144:0;12931:402:1;7611:144:0;7792:6;;;7771:38;;-1:-1:-1;;;;;7771:38:0;;;;7792:6;;;7771:38;;;7820:6;:17;;-1:-1:-1;;;;;;7820:17:0;-1:-1:-1;;;;;7820:17:0;;;;;;;;;;7540:305::o;3243:181::-;3301:7;;3333:5;3337:1;3333;:5;:::i;:::-;3321:17;;3362:1;3357;:6;;3349:46;;;;-1:-1:-1;;;3349:46:0;;13673:2:1;3349:46:0;;;13655:21:1;13712:2;13692:18;;;13685:30;13751:29;13731:18;;;13724:57;13798:18;;3349:46:0;13471:351:1;3349:46:0;3415:1;3243:181;-1:-1:-1;;;3243:181:0:o;12195:378::-;-1:-1:-1;;;;;12331:19:0;;12323:68;;;;-1:-1:-1;;;12323:68:0;;14029:2:1;12323:68:0;;;14011:21:1;14068:2;14048:18;;;14041:30;14107:34;14087:18;;;14080:62;-1:-1:-1;;;14158:18:1;;;14151:34;14202:19;;12323:68:0;13827:400:1;12323:68:0;-1:-1:-1;;;;;12410:21:0;;12402:68;;;;-1:-1:-1;;;12402:68:0;;14434:2:1;12402:68:0;;;14416:21:1;14473:2;14453:18;;;14446:30;14512:34;14492:18;;;14485:62;-1:-1:-1;;;14563:18:1;;;14556:32;14605:19;;12402:68:0;14232:398:1;12402:68:0;-1:-1:-1;;;;;12481:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12533:32;;2512:25:1;;;12533:32:0;;2485:18:1;12533:32:0;;;;;;;;12195:378;;;:::o;32454:3043::-;-1:-1:-1;;;;;32586:18:0;;32578:68;;;;-1:-1:-1;;;32578:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32665:16:0;;32657:64;;;;-1:-1:-1;;;32657:64:0;;;;;;;:::i;:::-;32738:6;32748:1;32738:11;32734:93;;32766:28;32782:4;32788:2;32792:1;32766:15;:28::i;32734:93::-;-1:-1:-1;;;;;32858:31:0;;;32839:16;32858:31;;;:25;:31;;;;;;;;;32918:29;;;;;;;;;32979:35;;;:29;:35;;;;;;32858:31;;;;;32918:29;;;;32979:35;32978:36;:87;;;;-1:-1:-1;;;;;;33032:33:0;;;;;;:29;:33;;;;;;;;33031:34;32978:87;32960:1229;;;33100:16;;-1:-1:-1;;;33100:16:0;;;;33092:59;;;;-1:-1:-1;;;33092:59:0;;15647:2:1;33092:59:0;;;15629:21:1;15686:2;15666:18;;;15659:30;15725:32;15705:18;;;15698:60;15775:18;;33092:59:0;15445:354:1;33092:59:0;33170:14;;;;;;;33166:1012;;;-1:-1:-1;;;;;33232:38:0;;;;;;:34;:38;;;;;;;;33231:39;:105;;;;-1:-1:-1;;;;;;33296:40:0;;;;;;:34;:40;;;;;;;;33295:41;33231:105;33205:675;;;33383:11;33379:232;;;33471:15;;33461:6;:25;;33423:164;;;;-1:-1:-1;;;33423:164:0;;16006:2:1;33423:164:0;;;15988:21:1;16045:2;16025:18;;;16018:30;16084:34;16064:18;;;16057:62;-1:-1:-1;;;16135:18:1;;;16128:39;16184:19;;33423:164:0;15804:405:1;33423:164:0;33639:10;33635:226;;;33726:11;;33716:6;:21;;33678:159;;;;-1:-1:-1;;;33678:159:0;;16416:2:1;33678:159:0;;;16398:21:1;16455:2;16435:18;;;16428:30;16494:34;16474:18;;;16467:62;-1:-1:-1;;;16545:18:1;;;16538:38;16593:19;;33678:159:0;16214:404:1;33678:159:0;-1:-1:-1;;;;;33905:33:0;;;;;;:29;:33;;;;;;;;33900:263;;34025:15;;34014:6;33998:13;34008:2;-1:-1:-1;;;;;8877:18:0;8845:7;8877:18;;;:9;:18;;;;;;;8726:177;33998:13;:22;;;;:::i;:::-;33997:43;;33963:180;;;;-1:-1:-1;;;33963:180:0;;16825:2:1;33963:180:0;;;16807:21:1;16864:2;16844:18;;;16837:30;16903:34;16883:18;;;16876:62;-1:-1:-1;;;16954:18:1;;;16947:49;17013:19;;33963:180:0;16623:415:1;33963:180:0;34201:37;34214:11;34227:10;34201:12;:37::i;:::-;34292:23;;34282:4;34249:12;8877:18;;;:9;:18;;;;;;34346:16;;-1:-1:-1;;34264:51:0;;-1:-1:-1;;;34346:16:0;;;;:40;;;;;34379:7;34346:40;:67;;;;-1:-1:-1;34404:9:0;;;;34403:10;34346:67;:97;;;;-1:-1:-1;34430:9:0;;-1:-1:-1;;;34430:9:0;;;;:13;;34346:97;:143;;;;-1:-1:-1;;;;;;34460:29:0;;;;;;:25;:29;;;;;;;;34346:143;:185;;;;-1:-1:-1;;;;;;34507:24:0;;;;;;:18;:24;;;;;;;;34506:25;34346:185;:225;;;;-1:-1:-1;;;;;;34549:22:0;;;;;;:18;:22;;;;;;;;34548:23;34346:225;34328:364;;;34600:9;:16;;-1:-1:-1;;34600:16:0;34612:4;34600:16;;;34631:17;:15;:17::i;:::-;34663:9;:17;;-1:-1:-1;;34663:17:0;;;34328:364;34720:9;;34704:12;;34720:9;;34719:10;:30;;;;-1:-1:-1;34733:16:0;;-1:-1:-1;;;34733:16:0;;;;34719:30;-1:-1:-1;;;;;34766:24:0;;;;;;:18;:24;;;;;;34704:45;;-1:-1:-1;34766:24:0;;;:50;;-1:-1:-1;;;;;;34794:22:0;;;;;;:18;:22;;;;;;;;34766:50;34762:98;;;-1:-1:-1;34843:5:0;34762:98;34874:7;:24;;;;-1:-1:-1;34885:9:0;;-1:-1:-1;;;34885:9:0;;;;:13;;34874:24;34870:414;;;34939:9;;34915:11;;34952:3;;34930:18;;-1:-1:-1;;;34939:9:0;;;;34930:6;:18;:::i;:::-;34929:26;;;;:::i;:::-;35001:8;;34915:40;;-1:-1:-1;34970:18:0;;35013:3;;34992:17;;35001:8;;;;;34992:6;:17;:::i;:::-;34991:25;;;;:::i;:::-;34970:46;-1:-1:-1;35040:12:0;35049:3;35040:6;:12;:::i;:::-;35031:21;;35067:41;35083:4;35097;35104:3;35067:15;:41::i;:::-;35129:14;;35125:148;;35164:38;35184:4;35191:10;35164:11;:38::i;:::-;35236:8;;35226:31;;;35236:8;;;;;;17343:36:1;;17410:2;17395:18;;17388:34;;;35226:31:0;;17316:18:1;35226:31:0;;;;;;;35125:148;34900:384;;34870:414;35294:33;35310:4;35316:2;35320:6;35294:15;:33::i;:::-;35344:13;;-1:-1:-1;;;;;35344:13:0;:24;35377:4;35384:15;35377:4;-1:-1:-1;;;;;8877:18:0;8845:7;8877:18;;;:9;:18;;;;;;;8726:177;35384:15;35344:56;;-1:-1:-1;;;;;;35344:56:0;;;;;;;-1:-1:-1;;;;;17641:32:1;;;35344:56:0;;;17623:51:1;17690:18;;;17683:34;17596:18;;35344:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35340:72;35426:13;;-1:-1:-1;;;;;35426:13:0;:24;35459:2;35464:13;35459:2;-1:-1:-1;;;;;8877:18:0;8845:7;8877:18;;;:9;:18;;;;;;;8726:177;35464:13;35426:52;;-1:-1:-1;;;;;;35426:52:0;;;;;;;-1:-1:-1;;;;;17641:32:1;;;35426:52:0;;;17623:51:1;17690:18;;;17683:34;17596:18;;35426:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35422:68;32567:2930;;;;32454:3043;;;:::o;3576:226::-;3696:7;3732:12;3724:6;;;;3716:29;;;;-1:-1:-1;;;3716:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3756:9:0;3768:5;3772:1;3768;:5;:::i;:::-;3756:17;3576:226;-1:-1:-1;;;;;3576:226:0:o;11736:451::-;-1:-1:-1;;;;;11820:21:0;;11812:67;;;;-1:-1:-1;;;11812:67:0;;17930:2:1;11812:67:0;;;17912:21:1;17969:2;17949:18;;;17942:30;18008:34;17988:18;;;17981:62;-1:-1:-1;;;18059:18:1;;;18052:31;18100:19;;11812:67:0;17728:397:1;11812:67:0;11971:105;12008:6;11971:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11971:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11950:18:0;;;;;;:9;:18;;;;;:126;12102:12;;:24;;12119:6;12102:16;:24::i;:::-;12087:12;:39;12142:37;;2512:25:1;;;12168:1:0;;-1:-1:-1;;;;;12142:37:0;;;;;2500:2:1;2485:18;12142:37:0;;;;;;;11736:451;;:::o;36674:1530::-;36911:22;;;;:45;;;;:22;;;;;:45;36907:329;;36978:187;;-1:-1:-1;;;18332:33:1;;18390:2;18381:12;36978:187:0;;;;;;;;37056:22;;;;37136:14;;36978:187;;37056:22;;;;;;;;36978:187;;;;-1:-1:-1;;;;;;;;;;;36978:187:0;;;37136:14;;;36978:187;:::i;:::-;;;;;;;;37180:22;;;:44;;-1:-1:-1;;37180:44:0;;;;;;;;;36907:329;37250:21;;;;:43;;;;:21;;;;;:43;37246:322;;37315:184;;-1:-1:-1;;;18820:32:1;;18877:2;18868:12;37315:184:0;;;;;;;;37392:21;;;;37470:14;;37315:184;;37392:21;;;;;;;;37315:184;;;;-1:-1:-1;;;;;;;;;;;37315:184:0;;;37470:14;;;37315:184;:::i;:::-;;;;;;;;37514:21;;;:42;;-1:-1:-1;;37514:42:0;;;;;;;;;37246:322;37582:17;;;;:35;;;;-1:-1:-1;;;37582:17:0;;;;:35;37578:294;;37639:172;;-1:-1:-1;;;19093:28:1;;19146:2;19137:12;37639:172:0;;;;;;;;37712:17;;;;37782:14;;37639:172;;37712:17;-1:-1:-1;;;37712:17:0;;;;;;37639:172;;;;-1:-1:-1;;;;;;;;;;;37639:172:0;;;37782:14;;;37639:172;:::i;:::-;;;;;;;;37826:17;;;:34;;-1:-1:-1;;37826:34:0;-1:-1:-1;;;37826:34:0;;;;;;;37578:294;37886:20;;;;:41;;;;-1:-1:-1;;;37886:20:0;;;;:41;37882:315;;37949:181;;-1:-1:-1;;;19362:31:1;;19418:2;19409:12;37949:181:0;;;;;;;;38025:20;;;;38101:14;;37949:181;;38025:20;-1:-1:-1;;;38025:20:0;;;;;;37949:181;;;;-1:-1:-1;;;;;;;;;;;37949:181:0;;;38101:14;;;37949:181;:::i;:::-;;;;;;;;38145:20;;;:40;;;;;-1:-1:-1;;;38145:40:0;-1:-1:-1;;38145:40:0;;;;;;36674:1530;;;;;:::o;38212:1497::-;38444:21;;;;:43;;;;:21;;:43;38440:322;;38509:184;;-1:-1:-1;;;19634:32:1;;19691:2;19682:12;38509:184:0;;;;;;;;38586:21;;;;38664:14;;38509:184;;38586:21;;;;;38509:184;;;;-1:-1:-1;;;;;;;;;;;38509:184:0;;;38664:14;;;38509:184;:::i;:::-;;;;;;;;38708:21;;;:42;;-1:-1:-1;;38708:42:0;;;;;;;38440:322;38776:20;;;;:41;;;;:20;;;;;:41;38772:315;;38839:181;;-1:-1:-1;;;19907:31:1;;19963:2;19954:12;38839:181:0;;;;;;;;38915:20;;;;38991:14;;38839:181;;38915:20;;;;;;;;38839:181;;;;-1:-1:-1;;;;;;;;;;;38839:181:0;;;38991:14;;;38839:181;:::i;:::-;;;;;;;;39035:20;;;:40;;-1:-1:-1;;39035:40:0;;;;;;;;;38772:315;39101:16;;;;:33;;;;-1:-1:-1;;;39101:16:0;;;;:33;39097:287;;39156:169;;-1:-1:-1;;;20179:27:1;;20231:2;20222:12;39156:169:0;;;;;;;;39228:16;;;;39296:14;;39156:169;;39228:16;-1:-1:-1;;;39228:16:0;;;;;;39156:169;;;;-1:-1:-1;;;;;;;;;;;39156:169:0;;;39296:14;;;39156:169;:::i;:::-;;;;;;;;39340:16;;;:32;;-1:-1:-1;;39340:32:0;-1:-1:-1;;;39340:32:0;;;;;;;39097:287;39398:19;;;;:39;;;;-1:-1:-1;;;39398:19:0;;;;:39;39394:308;;39459:178;;-1:-1:-1;;;20447:30:1;;20502:2;20493:12;39459:178:0;;;;;;;;39534:19;;;;39608:14;;39459:178;;39534:19;-1:-1:-1;;;39534:19:0;;;;;;39459:178;;;;-1:-1:-1;;;;;;;;;;;39459:178:0;;;39608:14;;;39459:178;:::i;:::-;;;;;;;;39652:19;;;:38;;;;;-1:-1:-1;;;39652:38:0;-1:-1:-1;;39652:38:0;;;;;;38212:1497;;;;;:::o;10740:606::-;-1:-1:-1;;;;;10880:20:0;;10872:70;;;;-1:-1:-1;;;10872:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10961:23:0;;10953:71;;;;-1:-1:-1;;;10953:71:0;;;;;;;:::i;:::-;11113:108;11149:6;11113:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11113:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11093:17:0;;;;;;;:9;:17;;;;;;:128;;;;11255:20;;;;;;;:32;;11280:6;11255:24;:32::i;:::-;-1:-1:-1;;;;;11232:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11303:35;;;;;;;;;;11331:6;2512:25:1;;2500:2;2485:18;;2366:177;35505:1161:0;35581:13;:17;;-1:-1:-1;;35659:15:0;;;35687:229;;;;35735:23;;35719:13;:39;;35735:23;;;;-1:-1:-1;;35773:37:0;;;;;;;35735:23;35788:22;;;;;;35773:37;;;;;;;;-1:-1:-1;;35869:35:0;-1:-1:-1;;;35836:18:0;;;;35825:29;;;;-1:-1:-1;;35869:35:0;;-1:-1:-1;;;35883:21:0;;;;35869:35;;;;;;;;35687:229;35930:10;35926:232;;;35973:24;;35957:13;:40;;35973:24;;;;;;;;-1:-1:-1;;36012:38:0;;;;;;;36027:23;;;;;;36012:38;;;;;-1:-1:-1;;36110:36:0;-1:-1:-1;;;36076:19:0;;;;36065:30;;-1:-1:-1;;36110:36:0;;-1:-1:-1;;;36124:22:0;;;;;;;36110:36;;;;;;;35926:232;36173:10;36172:11;:27;;;;;36188:11;36187:12;36172:27;36168:249;;;36232:24;;36216:13;:40;;36232:24;;;;;;;;-1:-1:-1;;36271:38:0;;;;;;;36286:23;;;;;;36271:38;;;;;-1:-1:-1;;36369:36:0;-1:-1:-1;;;36335:19:0;;;;36324:30;;-1:-1:-1;;36369:36:0;;-1:-1:-1;;;36383:22:0;;;;;;;36369:36;;;;;;;36168:249;36481:11;;;;;;;;;36470:8;;;;;;36439:28;;36481:11;36455:12;;;;;36439:13;:28;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;36427:9;:65;;-1:-1:-1;;36427:65:0;;-1:-1:-1;;;36427:65:0;;;;;;;;;;;;;36508:150;;;36534:13;;;;;;;;;;20755:36:1;;36427:65:0;36562:12;;;;20822:2:1;20807:18;;20800:45;36589:8:0;;;;;20861:18:1;;;20854:45;;;;36612:11:0;;;;;20930:2:1;20915:18;;20908:45;36638:9:0;;;;;;20984:3:1;20969:19;;20962:46;36508:150:0;;20742:3:1;20727:19;36508:150:0;20516:498:1;39717:1523:0;39807:4;39763:23;8877:18;;;:9;:18;;;;;;39961:9;;39763:50;;-1:-1:-1;39852:21:0;;39824:25;;39986:1;;39961:9;-1:-1:-1;;;39961:9:0;;;;;39913:31;;39931:13;39763:50;39913:31;:::i;:::-;39912:58;;;;:::i;:::-;:75;;;;:::i;:::-;40059:9;;39886:101;;-1:-1:-1;39998:24:0;;40059:9;-1:-1:-1;;;40059:9:0;;;;;40026:29;;40044:11;;;;;40026:15;:29;:::i;:::-;40025:43;;;;:::i;:::-;39998:70;-1:-1:-1;40079:20:0;40134:34;39998:70;40134:15;:34;:::i;:::-;40102:67;;:15;:67;:::i;:::-;40079:90;;40182:31;40200:12;40182:17;:31::i;:::-;40226:27;40256:41;40280:17;40256:21;:41;:::i;:::-;40389:11;;40226:71;;-1:-1:-1;40308:19:0;;40389:11;;;;;;;40378:8;;;;;;40357:17;;40378:8;;40357:13;:17;:::i;:::-;40356:30;;;;:::i;:::-;:44;;;;:::i;:::-;40330:9;;:71;;;-1:-1:-1;;;40330:9:0;;;;:71;:::i;:::-;40464:13;;40308:93;;;;;-1:-1:-1;40412:26:0;;40521:1;;40308:93;;40442:35;;40464:13;40442:19;:35;:::i;:::-;40441:64;;;;:::i;:::-;:81;;;;:::i;:::-;40412:110;-1:-1:-1;40533:25:0;40561:42;40412:110;40561:19;:42;:::i;:::-;40624:14;;40616:51;;40533:70;;-1:-1:-1;;;;;;40624:14:0;;40616:51;;;;;40533:70;;40624:14;40616:51;40624:14;40616:51;40533:70;40624:14;40616:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40684:19:0;;40680:253;;40720:50;40734:15;40751:18;40720:13;:50::i;:::-;40790:131;;;21591:25:1;;;21647:2;21632:18;;21625:34;;;21675:18;;;21668:34;;;40790:131:0;;21579:2:1;21564:18;40790:131:0;;;;;;;40680:253;41013:13;;40960:109;;-1:-1:-1;;;40960:109:0;;-1:-1:-1;;;;;41013:13:0;;;40960:109;;;17623:51:1;17690:18;;;17683:34;;;40945:12:0;;40975:4;;40960:30;;17596:18:1;;40960:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40945:124;;41084:7;41080:153;;;41108:13;;:62;;-1:-1:-1;;;41108:62:0;;;;;2512:25:1;;;-1:-1:-1;;;;;41108:13:0;;;;:44;;2485:18:1;;41108:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41190:31;41204:16;41190:31;;;;2512:25:1;;2500:2;2485:18;;2366:177;41190:31:0;;;;;;;;41080:153;39752:1488;;;;;;;;;;39717:1523::o;3432:136::-;3490:7;3517:43;3521:1;3524;3517:43;;;;;;;;;;;;;;;;;:3;:43::i;41248:500::-;41339:16;;;41353:1;41339:16;;;;;;;;41315:21;;41339:16;;;;;;;;;;-1:-1:-1;41339:16:0;41315:40;;41384:4;41366;41371:1;41366:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41366:23:0;;;:7;;;;;;;;;;:23;;;;41410:15;;:22;;;-1:-1:-1;;;41410:22:0;;;;:15;;;;;:20;;:22;;;;;41366:7;;41410:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41400:4;41405:1;41400:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41400:32:0;;;:7;;;;;;;;;:32;41475:15;;41443:62;;41460:4;;41475:15;41493:11;41443:8;:62::i;:::-;41516:15;;:224;;-1:-1:-1;;;41516:224:0;;-1:-1:-1;;;;;41516:15:0;;;;:66;;:224;;41597:11;;41516:15;;41667:4;;41694;;41714:15;;41516:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41304:444;41248:500;:::o;30391:555::-;30505:15;;30473:62;;30490:4;;-1:-1:-1;;;;;30505:15:0;30523:11;30473:8;:62::i;:::-;30574:10;30550:21;:34;30546:122;;;30601:55;;-1:-1:-1;;;30601:55:0;;23699:2:1;30601:55:0;;;23681:21:1;23738:2;23718:18;;;23711:30;23777:34;23757:18;;;23750:62;-1:-1:-1;;;23828:18:1;;;23821:43;23881:19;;30601:55:0;23497:409:1;30546:122:0;30678:15;;30882;;30678:260;;-1:-1:-1;;;30678:260:0;;30750:4;30678:260;;;24252:34:1;24302:18;;;24295:34;;;30678:15:0;24345:18:1;;;24338:34;;;24388:18;;;24381:34;-1:-1:-1;;;;;30882:15:0;;;24431:19:1;;;24424:44;30912:15:0;24484:19:1;;;24477:35;30678:15:0;;;:31;;30717:9;;24186:19:1;;30678:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;1905:456::-;1982:6;1990;1998;2051:2;2039:9;2030:7;2026:23;2022:32;2019:52;;;2067:1;2064;2057:12;2019:52;2106:9;2093:23;2125:31;2150:5;2125:31;:::i;:::-;2175:5;-1:-1:-1;2232:2:1;2217:18;;2204:32;2245:33;2204:32;2245:33;:::i;:::-;1905:456;;2297:7;;-1:-1:-1;;;2351:2:1;2336:18;;;;2323:32;;1905:456::o;2737:247::-;2796:6;2849:2;2837:9;2828:7;2824:23;2820:32;2817:52;;;2865:1;2862;2855:12;2817:52;2904:9;2891:23;2923:31;2948:5;2923:31;:::i;3197:156::-;3263:20;;3323:4;3312:16;;3302:27;;3292:55;;3343:1;3340;3333:12;3292:55;3197:156;;;:::o;3358:393::-;3436:6;3444;3452;3460;3513:3;3501:9;3492:7;3488:23;3484:33;3481:53;;;3530:1;3527;3520:12;3481:53;3553:27;3570:9;3553:27;:::i;:::-;3543:37;;3599:36;3631:2;3620:9;3616:18;3599:36;:::i;:::-;3589:46;;3654:36;3686:2;3675:9;3671:18;3654:36;:::i;:::-;3644:46;;3709:36;3741:2;3730:9;3726:18;3709:36;:::i;:::-;3699:46;;3358:393;;;;;;;:::o;3756:118::-;3842:5;3835:13;3828:21;3821:5;3818:32;3808:60;;3864:1;3861;3854:12;3879:382;3944:6;3952;4005:2;3993:9;3984:7;3980:23;3976:32;3973:52;;;4021:1;4018;4011:12;3973:52;4060:9;4047:23;4079:31;4104:5;4079:31;:::i;:::-;4129:5;-1:-1:-1;4186:2:1;4171:18;;4158:32;4199:30;4158:32;4199:30;:::i;:::-;4248:7;4238:17;;;3879: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:380::-;5162:1;5158:12;;;;5205;;;5226:61;;5280:4;5272:6;5268:17;5258:27;;5226:61;5333:2;5325:6;5322:14;5302:18;5299:38;5296:161;;5379:10;5374:3;5370:20;5367:1;5360:31;5414:4;5411:1;5404:15;5442:4;5439:1;5432:15;5296:161;;5083:380;;;:::o;5468:356::-;5670:2;5652:21;;;5689:18;;;5682:30;5748:34;5743:2;5728:18;;5721:62;5815:2;5800:18;;5468:356::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:406::-;9417:2;9399:21;;;9456:2;9436:18;;;9429:30;9495:34;9490:2;9475:18;;9468:62;-1:-1:-1;;;9561:2:1;9546:18;;9539:40;9611:3;9596:19;;9215:406::o;9626:184::-;9696:6;9749:2;9737:9;9728:7;9724:23;9720:32;9717:52;;;9765:1;9762;9755:12;9717:52;-1:-1:-1;9788:16:1;;9626:184;-1:-1:-1;9626:184:1:o;13338:128::-;13378:3;13409:1;13405:6;13402:1;13399:13;13396:39;;;13415:18;;:::i;:::-;-1:-1:-1;13451:9:1;;13338:128::o;14635:401::-;14837:2;14819:21;;;14876:2;14856:18;;;14849:30;14915:34;14910:2;14895:18;;14888:62;-1:-1:-1;;;14981:2:1;14966:18;;14959:35;15026:3;15011:19;;14635:401::o;15041:399::-;15243:2;15225:21;;;15282:2;15262:18;;;15255:30;15321:34;15316:2;15301:18;;15294:62;-1:-1:-1;;;15387:2:1;15372:18;;15365:33;15430:3;15415:19;;15041:399::o;17043:125::-;17083:4;17111:1;17108;17105:8;17102:34;;;17116:18;;:::i;:::-;-1:-1:-1;17153:9:1;;17043:125::o;18404:209::-;-1:-1:-1;;18568:38:1;;;;18550:57;;18538:2;18523:18;;18404:209::o;21019:165::-;21057:1;21091:4;21088:1;21084:12;21115:3;21105:37;;21122:18;;:::i;:::-;21174:3;21167:4;21164:1;21160:12;21156:22;21151:27;;;21019:165;;;;:::o;21189:195::-;21227:4;21264;21261:1;21257:12;21296:4;21293:1;21289:12;21321:3;21316;21313:12;21310:38;;;21328:18;;:::i;:::-;21365:13;;;21189:195;-1:-1:-1;;;21189:195:1:o;22124:127::-;22185:10;22180:3;22176:20;22173:1;22166:31;22216:4;22213:1;22206:15;22240:4;22237:1;22230:15;22256:251;22326:6;22379:2;22367:9;22358:7;22354:23;22350:32;22347:52;;;22395:1;22392;22385:12;22347:52;22427:9;22421:16;22446:31;22471:5;22446:31;:::i;22512:980::-;22774:4;22822:3;22811:9;22807:19;22853:6;22842:9;22835:25;22879:2;22917:6;22912:2;22901:9;22897:18;22890:34;22960:3;22955:2;22944:9;22940:18;22933:31;22984:6;23019;23013:13;23050:6;23042;23035:22;23088:3;23077:9;23073:19;23066:26;;23127:2;23119:6;23115:15;23101:29;;23148:1;23158:195;23172:6;23169:1;23166:13;23158:195;;;23237:13;;-1:-1:-1;;;;;23233:39:1;23221:52;;23328:15;;;;23293:12;;;;23269:1;23187:9;23158:195;;;-1:-1:-1;;;;;;;23409:32:1;;;;23404:2;23389:18;;23382:60;-1:-1:-1;;;23473:3:1;23458:19;23451:35;23370:3;22512:980;-1:-1:-1;;;22512:980:1:o;24523:306::-;24611:6;24619;24627;24680:2;24668:9;24659:7;24655:23;24651:32;24648:52;;;24696:1;24693;24686:12;24648:52;24725:9;24719:16;24709:26;;24775:2;24764:9;24760:18;24754:25;24744:35;;24819:2;24808:9;24804:18;24798:25;24788:35;;24523:306;;;;;:::o

Swarm Source

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